はじめに
このチュートリアルでは、基本的なアンケートアプリケーションの作成方法を説明します。
このチュートリアルでは、基本的なアンケートアプリケーションの作成方法を説明します。
例を見ながら学びましょう。
このチュートリアルでは、基本的なアンケートアプリケーションの作成方法を説明します。
このアプリケーションは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://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でさらに多くの実験を行って、技術力を向上させることができます。