Python、Djangoの勉強(4)
Django公式チュートリアルを進める。学んだことのみ記述する。
チュートリアル1~3
urlの仕組み
mysite\urls.py path('polls/', include('polls.urls')),
polls\urls.py path('1/', views.index, name='index'),
pollsにアクセスするURLは"http://127.0.0.1:8000/polls/1/"migrate コマンドは settings.pyのINSTALLED_APPSを実装するために動作する。
- python manage.py shell Pythonのシェルを実行。
models.py のstr(self):関数はデータ自身を参照した時の返送値を定義する。
def str(self):
return self.question_text
→question_textフィールドを返送する。Djangoのテンプレート参照
polls\templates\polls\index.html
→polls\index.htmlのように動作する
polls\view.py
template = loader.get_template('polls/index.html')
view.pyで定義したcontextはhtmlで参照できる。
polls\view.py.index
context = { <br> 'latest_question_list': latest_question_list, <br> } <br>
index.html {% if latest_question_list %}...
「templateにcontextを渡してHttpResponseを返送する」を省略した記述。 polls\view.py.index
# return HttpResponse(template.render(context, request)) <br> return render(request, 'polls/index.html', context)
データがなければ404を表示する。django.shortcusにある関数。
polls\view.py.detail
from django.shortcuts import get_object_or_404, render question = get_object_or_404(Question, pk=question_id)
urlはurl.pyの定義名を参照してハードコーディングを避けることができる。
polls\url.py
path('<int:question_id>/', views.detail, name='detail'),
チュートリアル4
-自サイト内を URL に指定した POST フォームには全て、 {% csrf_token %} テンプレートタグを使うべき
Djangoがクロスサイトリクエストフォージェリに自動で対応してくれる
path('archive/', views.archive, name='news-archive') のとき、reverse('news-archive') 又は reverse(views.archive)
どちらもURL 'archive/' を返すrenderはHTMLに値をバインドしたものをレスポンスとしてブラウザに表示する。
- redirectは別のURLに遷移する。何を表示するかは飛ばした先による。
汎用ビューというものが存在する。
- DetailView 汎用ビューは