今更一から勉強しよう

勉強のノート。

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'),

チュートリアル

-自サイト内を 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 汎用ビューは /_detail.html という名前のテンプレートを使います。この場合、テンプレートの名前は "polls/question_detail.html" です。 - Django はコンテキスト変数にふさわしい名前を決める - DetailView には question 、ListView では、自動的に生成されるコンテキスト変数は question_list - context_object_name で変更可能。