はじめてのDjango チュートリアル①

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アプリケーションを追加

  • 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.")
  • 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として文字列を返している

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'

Django のリクエスト処理

docs.djangoproject.com