Skip to content

1. リクエストとレスポンス#

はじめての Django アプリ作成 その1

プロジェクトの作成#

django-admin startproject <プロジェクト名>でプロジェクトを作成

Info

  • プロジェクト名は、組み込みの Python モジュールや Django のコンポーネントの名前を使わないようにすること
  • 例えば、 django (Django 自体と名前が衝突します) や test (組み込みの Python パッケージ名と名前が衝突します) を使わないこと

実行後、現在のディレクトリに <プロジェクト名> ディレクトリが作成される。

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

生成されたファイルについての説明は以下の通り

  • manage.py: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティ
  • mysite/__init__.py: Python パッケージであることを Python に知らせるための空のファイル
  • mysite/settings.py: Django プロジェクトの設定ファイル
  • mysite/urls.py: Django プロジェクトの設定ファイル
  • mysite/asgi.py: Django プロジェクトの URL 宣言、Django サイトにおける「目次」に相当
  • mysite/wsgi.py: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイント

Django のプロジェクトがうまく動作するか、python manage.py runserverを実行して確認

(venv) C:\Users\omron\Documents\20_Python\dev\Django\mysite> python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 31, 2022 - 21:01:14
Django version 4.1.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Info

  • ポート番号は python manage.py runserver 8080 のように実行することで指定可能
  • 全ての IP からのリクエストを受け付けるには python manage.py runserver 0.0.0.0:8000 のように実行する

Polls アプリケーションの作成#

  • ここまでの作業でプロジェクトが立ち上がり、作業にとりかかる準備ができた状態。
  • Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成される。
  • Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれており、ディレクトリを作ることではなくコードを書くことに集中できる。

  • この例では manage.py ファイルと同じディレクトリにポーリングアプリを作成する。

  • manage.py ファイルと同じディレクトリでpython manage.py startapp pollsを実行する。
  • 実行後以下のディレクトリとファイル群が生成される(アプリケーションのメインフレームにあたる)
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py
    

ビュー作成#

polls/views.pyのファイルに以下を記述

polls/views.py
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

ビューを呼ぶためにURLを紐付ける必要があり、そのためには URLconf が必要。
polls ディレクトリに URLconf を作るには urls.py というファイルを作成する。
アプリのディレクトリは以下のようになるはず。

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

polls/urls.pyファイルを作成し、以下のように記述する

polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

次にルートのURLconfpolls.urls モジュールの記述を反映させる。 mysite/urls.pydjango.urls.includeimport を追加し、 urlpatterns のリストに include() を挿入。

mysite/urls.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

```py title=""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() 関数は他の URLconf への参照を可能にする。 Django が include() に遭遇すると、そのポイントまでに一致した URL の部分を切り落とし、次の処理のために残りの文字列をインクルードされた URLconf へ渡す。

include() の背景にある考えは、 URL を簡単にプラグ & プレイ可能にすること。 polls には独自の URLconf (polls/urls.py) を持っており、 /polls//fun_polls/ や、 /content/polls/ といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作する

ここまでの作業で index ビューを URLconf に紐付けることができている状態 python manage.py runserverを実行して、動作を確認 ブラウザで http://localhost:8000/polls/ にアクセスすると、 "Hello, world. You're at the polls index." と表示されるのが確認できる