docs.djangoproject.com
前回の続きからこちらを進める
- 投票アプリ
- ユーザが投票したり結果を表示したりできる公開用サイト
- 投票項目の追加、変更、削除を行うための管理 (admin) サイト
ユーザーテーブルや投票テーブルの作成やCRUD処理が学べるチュートリアルのようです!
$ python -m django --version
=> 3.0
プロジェクトの作成
$ django-admin startproject mysite
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
- ここmysiteが2つ作成される(外側と内側って紛らわしい…)
開発サーバーを立ち上げてみる
$ python manage.py runserver
pollアプリケーションを追加
- manage.pyがあるディレクトリで以下のコマンドを実行
- django-app/mysite/polls/になると思うのだけど合っているのだろうか🤔
$ 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.")
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() 関数
docs.djangoproject.com
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'
docs.djangoproject.com