docs.djangoproject.com 前回の続きからこちらを進める
チュートリアルの目標物
- 投票アプリ
- ユーザが投票したり結果を表示したりできる公開用サイト
- 投票項目の追加、変更、削除を行うための管理 (admin) サイト
ユーザーテーブルや投票テーブルの作成やCRUD処理が学べるチュートリアルのようです!
$ python -m django --version => 3.0
プロジェクトの作成
$ django-admin startproject mysite
- rails new 的なことをやっているはず…!
mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py
- ここmysiteが2つ作成される(外側と内側って紛らわしい…)
開発サーバーを立ち上げてみる
$ python manage.py runserver
pollアプリケーションを追加
$ python manage.py startapp polls
はじめてのビューを作る
polls/views.py
from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
- Ruby on Railsでいうところのcontrollerかな
- Railsだとviewはtemplateにあたるかと思います
URLの設定
ビューを呼ぶために、 URL を対応付けしてやる必要があります。そのためには URLconf が必要です。
- URLconf を作るには urls.pyファイルを作る polls/urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
- mysite/urls.pyに…と書いているけど内側か外側か分からないぞ🤔 django-app/mysite/mysite/urls.pyに書くぞ?
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
include() 関数
ちょっと文章だけだと分からない😂
http://127.0.0.1:8000/polls/にアクセスすると urlマッチでviewのdef indexを読んでGET RequestでResponseとして文字列を返している
path() 関数は4つの引数を受け取ります。引数のうち route と view の2つは必須で、kwargs、name の2つは省略可能
- 引数: route [必須] route は URL パターンを含む文字列です。リクエストを処理するとき、Django は urlpatterns のはじめのパターンから開始し、リストを順に下に見ていきます。要求された URL を一致するものを見つけるまで各パターンと比較します。
パターンはGETやPOSTのパラメーター、そしてドメイン名を検索しません。例えば、 https://www.example.com/myapp/ へのリクエストにおいては、URLconfは myapp/ を見ます。 https://www.example.com/myapp/?page=3 へのリクエストにおいても、URLconfは myapp/ を見ます。
引数: view [必須] Django がマッチする正規表現を見つけると、 Django は指定されたビュー関数を呼び出します。その際は HttpRequest オブジェクトを第一引数に、そしてキーワード引数としてrouteから「キャプチャされた」値を呼び出します。この例はこの後すぐ出てきます。
引数: kwargs 任意のキーワード引数を辞書として対象のビューに渡せます。この機能はチュートリアルでは使いません。
引数: name URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。
path(route、view、kwargs = None、name = None)
path('polls/', include('polls.urls'))
- route= 'polls/', view= include('polls.urls')
path('admin/', admin.site.urls)
- route= 'admin/', view= admin.site.urls
path('', views.index, name='index')
- route= '', views.index, name='index'