投稿日:2019年11月9日
Djangoは簡単にWebアプリケーションを作成できるフレームワークです。この記事は初心者の方向けのDjangoチュートリアルです。
前回(Part8)の記事では簡単なview関数を作成しました。今回のPartでは、HttpRequestオブジェクトをそのURLごとに適切なview関数へマッピングするURLconf(URL configuration)を作成していきます。
URLconf(URL configuration)とはHTTPRequestオブジェクトを受け取り、それをurlごとに適切なview関数にマッピングするPythonモジュールのことを言います。どのファイルをURLconfとして読みに行くかは設定ファイル(settings.py)でROOT_URLCONFとして設定されています。たいていの場合、これはプロジェクト作成時にプロジェクト直下にあるurls.pyになっていて、特に理由がない限りこれを変える必要はないでしょう。
[...]
ROOT_URLCONF = 'sample_blog.urls'
[...]
URLのマッチングで正規表現でマッチした値については位置引数として渡されます。
これからURLconfを作成していくのですが、まずURLの管理方法を説明します。まず全てのHttpRequestオブジェクトを受け取る入り口の役目を持つROOTのURLconfでどのアプリケーションのURLかをパターンマッチングし、適切なアプリケーションディレクトリ内のURLconfに渡しそちらに残りのパターンマッチングを引き継いでもらうような構成にします。
この管理方法はDjango側で推奨されている方法です。他のフレームワークではURLconfというのは煩雑になりがちなのですが、Djangoはこの様な分割のおかげで管理がとてもしやすくなってます。
ではまずはアプリケーション側のURLconfを作成blogディレクトリに新しくurls.pyファイルを作成し以下の様に編集してみましょう。
from django.urls import path
from . import views # view関数のimport
app_name = 'blog' # app_name
urlpatterns = [
path('' views.article_list, name='article_list'),
path('<int:id>/',
views.article_detail,
name='article_detail'),
]
まず簡単に解説していきます。
まずapp_nameという値を定義をしています。この様にapp_nameを定義したURLconfはDjangoのアプリケーション内でその名前で参照することができます。詳しくは次のPartのtemplateの項で詳しく説明します。
DjangoはURLconfをみに行くときにそのモジュールの中のurlpatternsを探します。マッピングの定義はこのurlpatternsにpath()やre_path()というマッピング用の関数のリストで定義されます。
まずはじめにarticle_list()へのマッピングについてです。django.urls.path()関数は第一引数にURLのパターンを文字列で受け取り、第2引数に渡す先のview関数を受け取ります。1つめのpath('' views.article_list, name='article_list')
ではこのURLconfに送られたルートのURLのHTTPRequestオブジェクトをそのままviewsのarticle_list()関数に送るようマッピングされています。またオプションの引数としてname引数を受け取っています。Djangoのアプリケーション内ではapp_nameとこのnameでどのURLのマッピングかの参照ができます。これも詳しくは次のPartで説明。
次にarticle_detail()へのマッピングです。ここではURLの中にブラケット(<>の記号)が使われています。path()メソッドではブラケットで以下の様に定義した値に関してはそれをview関数に追加で渡すことができるのです。
<値の型:viewに渡す際のキー>
つまり今回の場合、例えばhttp://〇〇.com/blog/12/
の様なURLにリクエストが送られた時article_detail()関数はHttpRequestオブジェクトに加えてid=12という引数を受け取れるということになります。
※今回はデバッグのしやすさとわかりやすさのためにURLにidを使いましたが、実はこれはセキュリティ的にタブーになっています。これについては少し後のPartで解説します。
では次にROOTのURLconfを編集してみましょう
from django.urls import path, include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls', namespace='blog')),
]
ここでは新しくinclude()という関数が出てきています。この関数は単純にそのurlに着たHTTPRequestオブジェクトを別のURLconfに渡す仲介の様な役目をしています。
オプションの引数として、namespaceを渡しています。Djangoアプリケーションではこのnamespaceとname引数の値を使ってURLの名前解決ができるのです。
例えばhttp://〇〇.com/blog/article_list
の様なURLを"blog:article_list"
の様に参照できるのです。
わからない部分は公式のドキュメントを参照しましょう。
このPartでは使用しませんでしたが複雑なURLの定義が必要になった時にはdjango.url.re_path()関数を使用しましょう。この関数はURLに正規表現が使用できます。詳しくは公式のドキュメントを参照してください。
What's The Job Market For Top Pornstar Only Fans Professionals Like?
Top Pornstar Only fans
sample_blog/blog/urls.py内の
path('' views.article_list, name='article_list'),
は
path('', views.article_list, name='article_list'),
であると思われます。
You'll Be Unable To Guess Pornstar UK's Secrets Pornstar uk