はじめに
このチュートリアルでは、基本的なアンケートアプリケーションの作成方法を説明します。
概要
例を見ながら学びましょう。
このチュートリアルでは、基本的なアンケートアプリケーションの作成方法を説明します。
このアプリケーションは 2 つの部分で構成されます。
- アンケートを閲覧して投票できるパブリックサイト
- アンケートを追加、変更、削除できる管理サイト
既に Django がインストールされていると仮定します。シェルプロンプトで次のコマンドを実行することで、Django がインストールされているかどうかとそのバージョンを確認できます。
python -m django --version
Django がインストールされている場合、インストールされているバージョンが表示されます。インストールされていない場合、「No module named django」というエラーが表示されます。
このチュートリアルは Python 3.10 以降をサポートする Django 向けに書かれています。Django のバージョンが一致しない場合は、このページの右下のバージョン切り替えツールを使用して、自分の Django のバージョンに対応するチュートリアルを参照するか、Django を最新バージョンに更新してください。
プロジェクトの作成
Django を初めて使用する場合、初期設定を行う必要があります。具体的には、Django の「プロジェクト」を自動生成する必要があります。これは、Django のインスタンスの設定のコレクションであり、データベース構成、Django 固有のオプション、アプリケーション固有の設定を含みます。
コマンドラインから、コードを保存したいディレクトリに移動してから、次のコマンドを実行します。
cd ~/project
django-admin startproject mysite
これにより、現在のディレクトリに mysite ディレクトリが作成されます。
startproject が作成したものを見てみましょう。
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
これらのファイルは以下の通りです。
- 外側の
mysite/ルートディレクトリは、プロジェクトのコンテナです。その名前は Django にとっては重要ではありません。好きな名前に変更できます。 manage.py:Django プロジェクトと様々な方法で対話できるコマンドラインユーティリティ。- 内側の
mysite/ディレクトリは、プロジェクトの実際の Python パッケージです。その名前は、その中にある何かをインポートする際に使用する Python パッケージ名です(例:mysite.urls)。 mysite/__init__.py:空のファイルで、このディレクトリが Python パッケージとして見なされるように Python に伝えます。mysite/settings.py:この Django プロジェクトの設定/構成。mysite/urls.py:この Django プロジェクトの URL 宣言;Django で動作するサイトの「目次」。mysite/asgi.py:ASGI 互換の Web サーバーがプロジェクトを提供するためのエントリポイント。mysite/wsgi.py:WSGI 互換の Web サーバーがプロジェクトを提供するためのエントリポイント。
開発サーバー
Django プロジェクトが正常に動作することを確認しましょう。まだ行っていなければ、外側の mysite ディレクトリに移動して、次のコマンドを実行します。
cd ~/project/mysite
python manage.py runserver
コマンドラインに次の出力が表示されます。
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.
- 15:50:53 Django version, using settings'mysite.settings' Starting development server at <http://127.0.0.1:8000/> Quit the server with CONTROL-C.
まだ適用されていないデータベースマイグレーションに関する警告は今は無視してください。すぐ後でデータベースについて対処します。
Django の開発サーバーを起動しました。これは、純粋に Python で書かれた軽量な Web サーバーです。Django にこれを含めたのは、本番環境用のサーバー(たとえば Apache)を設定する面倒を省き、本番環境に備えるまで迅速に開発できるようにするためです。
ここで注意しておくことが重要です。本番環境に似た環境ではこのサーバーを使わないでください。これは開発中にのみ使用することを想定しています。(私たちは Web フレームワークを作るビジネスをしているので、Web サーバーは作っていません。)
サーバーが起動したら、Web ブラウザで http://127.0.0.1:8000/ にアクセスしてください。または、ターミナルで curl 127.0.0.1:8000 を実行しても良いです。「おめでとうございます!」というページが表示され、ロケットが打ち上がっているはずです。成功です!
LabEx VM では、LabEx ドメインを ALLOWED_HOSTS に追加する必要があります。mysite/settings.py を編集して、ALLOWED_HOSTS の末尾に * を追加します。このようになります。
ALLOWED_HOSTS = ["*"]
これにより、Django に任意のホストヘッダーでリクエストを処理することが許可されるようになります。

ポートの変更
デフォルトでは、runserver コマンドは内部 IP のポート 8000 で開発サーバーを起動します。
サーバーのポートを変更したい場合は、コマンドライン引数として指定します。たとえば、このコマンドはポート 8080 でサーバーを起動します。
python manage.py runserver 8080
サーバーの IP を変更したい場合は、ポートと一緒に指定します。たとえば、すべての利用可能なパブリック IP でリッスンするには(Vagrant を実行している場合や、ネットワーク上の他のコンピュータで作業成果を見せたい場合に便利)、次のように使用します。
python manage.py runserver 0.0.0.0:8080
次に、LabEx VM の Web 8080 タブに切り替えると、同じ「おめでとう」ページが表示されます。

開発サーバーの完全なドキュメントは、runserver のリファレンスで見つけることができます。
runserverの自動リロード 開発サーバーは、必要に応じて各リクエストごとに Python コードを自動的に再読み込みします。コードの変更が反映されるようにサーバーを再起動する必要はありません。ただし、ファイルの追加などの一部の操作は再起動をトリガーしません。この場合、サーバーを再起動する必要があります。
投票アプリケーションの作成
これで、「プロジェクト」と呼ばれる環境がセットアップされましたので、作業を始める準備が整いました。
Django で書く各アプリケーションは、特定の規約に従った Python パッケージで構成されます。Django には、アプリケーションの基本的なディレクトリ構造を自動生成するユーティリティが付属しているため、ディレクトリを作成することよりもコードの記述に集中することができます。
プロジェクトとアプリケーションの違い プロジェクトとアプリケーションの違いは何でしょうか?アプリケーションは、何かを行う Web アプリケーションです。たとえば、ブログシステム、公開記録のデータベース、または小さな投票アプリケーションなどです。プロジェクトは、特定の Web サイトの設定とアプリケーションのコレクションです。プロジェクトには複数のアプリケーションが含まれる場合があります。アプリケーションは複数のプロジェクトに含まれる場合があります。
あなたのアプリケーションは、Pythonパス<tut-searchpath>上のどこにでも配置できます。このチュートリアルでは、投票アプリケーションをmanage.pyファイルと同じディレクトリに作成します。これにより、それ自体のトップレベルモジュールとしてインポートできるようになり、mysiteのサブモジュールではなくなります。
アプリケーションを作成するには、manage.pyと同じディレクトリにいることを確認して、次のコマンドを入力します。
cd ~/project/mysite
python manage.py startapp polls
これにより、pollsというディレクトリが作成され、以下のような構成になっています。
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
このディレクトリ構造に投票アプリケーションが配置されます。
最初のビューを書く
最初のビューを書いてみましょう。polls/views.py ファイルを開き、次の Python コードを入力します。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
これは Django で可能な最もシンプルなビューです。ビューを呼び出すには、それを URL にマッピングする必要があります。このためには URLconf が必要です。
投票アプリケーションのディレクトリに URLconf を作成するには、urls.py という名前のファイルを作成します。アプリケーションのディレクトリは次のようになります。
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
polls/urls.py ファイルに次のコードを記述します。
from django.urls import path
from. import views
urlpatterns = [
path("", views.index, name="index"),
]
次のステップは、ルート URLconf を polls.urls モジュールに向けることです。mysite/urls.py で、django.urls.include のインポートを追加し、urlpatterns リストに ~django.urls.include を挿入します。このようになります。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
~django.urls.include 関数は、他の URLconf を参照するために使用します。Django が ~django.urls.include に遭遇すると、その時点までに一致した URL の部分を切り捨て、残りの文字列を含まれる URLconf に送り、さらなる処理を行います。
~django.urls.include の背後にある考え方は、URL を簡単にプラグアンドプレイできるようにすることです。投票アプリケーションは独自の URLconf(polls/urls.py)にあるため、/polls/ の下、/fun_polls/ の下、/content/polls/ の下、またはその他の任意のパスルートの下に配置でき、アプリケーションは依然として機能します。
~django.urls.include()を使用するタイミング 他の URL パターンを含める場合、常にinclude()を使用する必要があります。このルールの唯一の例外はadmin.site.urlsです。
これで、index ビューが URLconf に接続されました。次のコマンドでそれが正常に動作することを確認します。
python manage.py runserver 0.0.0.0:8080
ブラウザで <http:///polls/> にアクセスすると、index ビューで定義した "Hello, world. You're at the polls index." というテキストが表示されるはずです。

~django.urls.path 関数には 4 つの引数が渡されます。必須の引数は 2 つで、route と view です。オプションの引数も 2 つで、kwargs と name です。この時点で、これらの引数が何のためのものかを見直しておく価値があります。
~django.urls.path 引数:route
route は URL パターンを含む文字列です。リクエストを処理する際、Django は urlpatterns の最初のパターンから始まり、リストを下に向かって進み、要求された URL と各パターンを比較して、一致するものが見つかるまで続けます。
パターンは GET や POST パラメータ、ドメイン名を検索しません。たとえば、https://www.example.com/myapp/ へのリクエストでは、URLconf は myapp/ を探します。https://www.example.com/myapp/?page=3 へのリクエストでも、URLconf は myapp/ を探します。
~django.urls.path 引数:view
Django が一致するパターンを見つけると、指定されたビュー関数に ~django.http.HttpRequest オブジェクトを第 1 引数として、ルートからの任意の「キャプチャされた」値をキーワード引数として渡して呼び出します。この例については少し後で説明します。
~django.urls.path 引数:kwargs
任意のキーワード引数を辞書形式で対象のビューに渡すことができます。このチュートリアルでは Django のこの機能を使用しません。
~django.urls.path 引数:name
URL に名前を付けることで、Django 内の他の場所、特にテンプレート内から明確に参照できるようになります。この強力な機能により、プロジェクトの URL パターンをグローバルに変更する際に、単一のファイルのみを編集すれば済むようになります。
まとめ
おめでとうございます!基本的な投票アプリケーションの作成の実験を完了しました。LabEx でさらに多くの実験を行って、技術力を向上させることができます。