DjangoのURLconfについて
DjangoのURLディスパッチャについて調べたときのメモ
Djangoでの あるリクエストに対してどのビューを返すか という仕組みを理解することが目的。
→理解できた!!
以下のようなmysite_url_disp
というプロジェクトの中にmyapp
というアプリケーションがあったとする。
$ tree mysite_url_disp/ mysite_url_disp/ ├── manage.py ├── myapp │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py └── mysite_url_disp ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ └── settings.cpython-36.pyc ├── settings.py ├── urls.py └── wsgi.py
URLディスパッチャ
あるURLに対してどのビュー関数を返すかを設定する。
DjangoのURLディスパッチャはURLconfという設定ファイルに記述することになっている。DjangoではURLconfはurls.py
というファイルに記述する。
リクエストからレスポンスまでの流れ
URLconf(urls.py
, URLディスパッチャの設定ファイル)の役割
URLconfの役割はviews.py
内に定義されているview関数とURLのパターンの対応付けを行うこと
views.py内にview関数が記述されていても、URLconfに記述されていないとページは表示されない。
URLconfは2種類ある
mysite_url_disp/urls.py
にすべてのURLconfを書くことはできるが、アプリケーションごとにURLconfを作ると管理がしやすくなる。
URLconfはプロジェクト用とアプリケーション用の2つを作ること!
- プロジェクト用のURLconf:
mysite_url_disp/urls.py
- アプリケーション用のURLconf:
myapp/urls.py
views.py
の役割
view関数を記述し、リクエストに対してのレスポンスを返す
views.py配下のように記述した
from django.shortcuts import render from django.http.response import HttpResponse def index_page(request): return HttpResponse('This is url test.')
(views.py
についてはここ以外のところで12/3(日)に調べてまとめる)
URLconfにURLディスパッチャを記述する
まずは、アプリケーションのURLconf(myapp/urls.py
)にURLディスパッチャを設定する
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index_page, name='index_page'), ]
views.py
の中に定義されているindex_page()
関数を index_page という名前で urlpatterns のリストに追加する
次に、プロジェクトのURLconf(mysite_url_disp/urls.py
)にURLディスパッチャを設定する
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', include('myapp.urls'), name='myapp'), ]
URLが index/
で始まるとき(http://127.0.0.1:8000/index/ や http://127.0.0.1:8000/index/hello など)、myappのurlsの中に定義されているurlpatternsを見に行くということになる
アクセスしてみる
python manage.py runserver
http://127.0.0.1:8000/index/ にアクセスしてみると、views.pyのindex_page()に記述した文字列が表示される。
urlpatternsについて
urls.py
内にurlpatternsというものがある
これはDjangoによって、URLにマッチする定義があれば、そのview関数を呼び出すという動作をする。ページを追加するときにはurlpatternsにURLパターンを追加する!
urlpatternsについてわかったかも!
それぞれのURLconf内のurlpatterns
が以下のようになってたとする
# myapp/urls.py urlpatterns = [ url(r'^$', views.index_page, name='index_page'), url(r'^hello', views.hello_page, name='hello_page'), ]
# mysite_url_disp/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', include('myapp.urls'), name='myapp'), ]
リクエストのURLによって、動作が変わる
- http://127.0.0.1:8000/polls/ : views.py内の
index_page()
が呼ばれる。 - http://127.0.0.1:8000/polls/hello : views.py内の
hello_page()
が呼ばれる。