はじめての Django アプリ作成、その 1¶
さあ、例を交えながら学んでゆきましょう。
このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。
Poll アプリケーションは 2 つの部分からなります:
ユーザが投票したり結果を表示したりできる公開用サイト
投票項目の追加、変更、削除を行うための管理 (admin) サイト
Django は既にインストール済み として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト(先頭の $ は入力待ちを示す記号です)で実行します。
$ python -m django --version
...\> py -m django --version
Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ "No module named django" とエラーが表示されます。
このチュートリアルは Python 3.10 以降をサポートする Django 5.1 用に書かれています。もし Django のバージョンが一致しない場合は、このページの右下にあるバージョンスイッチャーを使って、あなたの Django のバージョンのチュートリアルを参照するか、Django を最新バージョンにアップデートしてください。古いバージョンの Python を使っている場合は、 どのバージョンの Python で Django が使えますか? をチェックして、互換性のあるバージョンの Django を見つけてください。
困ったときは:
このチュートリアルの実行に問題がある場合は、FAQ の Getting Help セクションに進んでください。
プロジェクトを作成する¶
初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django のプロジェクト (project) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。
コマンドラインから、コードを保存したいディレクトリに移動し、djangotutorial
という名前の新しいディレクトリを作成します。(このディレクトリ名はDjangoには関係なく、任意の名前に変更できます。)
$ mkdir djangotutorial
...\> mkdir djangotutorial
次に、以下のコマンドを実行して新しいDjangoプロジェクトを立ち上げます。
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
これにより、djangotutorial
ディレクトリ内に mysite
という名前のプロジェクトが作成されます。もしうまくいかなかった場合は、 django-admin 実行時の問題 を参照してください。
注釈
プロジェクトの名前を付けるとき、組み込みの Python モジュールや Django のコンポーネントの名前を使わないようにしてください。とりわけ、 django
(Django 自体と名前が衝突します) や test
(組み込みの Python パッケージ名と名前が衝突します) を使わないようにしましょう。
startproject
が何を作成したかをみてみましょう:
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
ファイルはそれぞれ以下のような役割を持っています:
manage.py
: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです。詳しくは django-admin と manage.py 内のmanage.py
を参照してください。mysite/
: これは実際のプロジェクト用のPythonパッケージを含むディレクトリです。このディレクトリの名前は、内部のモジュールやパッケージをインポートするために使用するPythonパッケージ名になります(例:mysite.urls
)。mysite/__init__.py
: このディレクトリが Python パッケージであることを Python に知らせるための空のファイルです。Python の初心者は、 Python の公式ドキュメントの more about packages を読んで下さい。mysite/settings.py
: Django プロジェクトの設定ファイルです。 設定の仕組みは Djangoの設定 を参照してください。mysite/urls.py
: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは URL ディスパッチャ を参照 してください。mysite/asgi.py
: プロジェクトをサーブするためのASGI互換Webサーバーとのエントリーポイントです。詳細については ASGI とともにデプロイするには を参照してください。mysite/wsgi.py
: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は WSGI とともにデプロイするには を参照してください。
開発用サーバー¶
Djangoプロジェクトが正常に動作するか確認しましょう。まだであれば、djangotutorial
ディレクトリに移動し、以下のコマンドを実行してください。
$ python manage.py runserver
...\> py 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. 1月 08, 2025 - 15:50:53 Django version 5.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
注釈
適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。
さあ、これでサーバが起動したので、ブラウザで http://127.0.0.1:8000/ にアクセスしてみてください。 "Congratulations!" と表示された、ロケットが離陸しているページが出るはずです。やりましたね!
これで、 Django 開発サーバを起動しました。 Django 開発サーバは Python だけで書かれた軽量な Web サーバです。このサーバは、開発を迅速に行い、運用に適した状態になるまで Apache のような運用サーバの設定をいじらなくても良いようにするためのものです。
ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では 使わないでください (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。
(サイトを別のポートで提供するには、runserver
のリファレンスを参照してください。)
runserver
の自動リロード
開発サーバーは必要に応じてリクエストごとにPythonコードを自動的にリロードします。コード変更の効果を得るためにサーバーを再起動する必要はありません。しかしながら、ファイルの追加のようないくつかの行動は再起動をトリガーしません、このような場合はサーバーを再起動する必要があります。
Polls アプリケーションをつくる¶
さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。
Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成されます。 Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれているので、ディレクトリを作ることではなくコードを書くことに集中できます。
プロジェクトとアプリケーション
プロジェクトとアプリの違いは何でしょうか? アプリとは、ブログシステム、公的記録のデータベース、小規模な投票アプリなど、何かを行う Web アプリケーションです。プロジェクトは、特定のウェブサイトの構成とアプリのコレクションです。プロジェクトには複数のアプリを含めることができます。 アプリは複数のプロジェクトに存在できます。
アプリはあなたの Python パス のどこにでも配置できます。このチュートリアルでは、djangotutorial
フォルダー内に投票アプリを作成します。
アプリケーションを作るには、 manage.py
と同じディレクトリに入って、このコマンドを実行します:
$ python manage.py startapp polls
...\> py manage.py startapp polls
このコマンドは polls
というディレクトリを作成します。中身はこのようになっています:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
このディレクトリ構造が、 poll アプリケーションの全体像です。
はじめてのビュー作成¶
最初のビューを書いてみましょう。 polls/views.py
を開いて、以下の Python コードを書いてください:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
これはDjangoにおける最も基本的なビューです。これにブラウザからアクセスするためには、URLにマッピングする必要があります。そのためには、URL設定、略して「URLconf」を定義する必要があります。このURL設定は、各Djangoアプリ内で定義されており、urls.py
という名前のPythonファイルです。
polls
アプリのURLconfを定義するには、以下の内容で polls/urls.py
というファイルを作成します。
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
あなたのアプリディレクトリは、次のようになっているはずです。
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
次のステップは、mysite
プロジェクトのグローバルなURLconfに、polls.urls
で定義されたURLconfを含めることです。そのためには、mysite/urls.py
で django.urls.include
をインポートし、urlpatterns
リストに include()
を追加します。つまり、次のようにします。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
path()
関数には少なくとも2つの引数、route
と view
が必要です。include()
関数は、他のURLconfを参照するのに使います。Djangoが include()
を見つけると、これまでに一致したURLの部分を切り捨て、残りの文字列をインクルードされたURLconfに渡して、さらに処理を続けます。
include()
の背景にある考えは、 URL を簡単にプラグ & プレイ可能にすることです。 polls には独自の URLconf (polls/urls.py
) を持っているので、 "/polls/" 、 "/fun_polls/" や、 "/content/polls/" といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。
include()
を使うとき
他のURLパターンを含める際には、常に include()
を使用するべきです。ただし、例外として admin.site.urls
があります。これは、Djangoが提供するデフォルトの管理サイト用に事前に作成されたURLconfです。
これで index
ビューを URLconf に紐付けることができました。下記のコマンドを実行して、動作を確認してください:
$ python manage.py runserver
...\> py manage.py runserver
ブラウザで http://localhost:8000/polls/ にアクセスすると、 "Hello, world. You're at the polls index." と表示されるのが確認できるでしょう。これはビューの index
で定義したものです。
ページが見つかりませんか?
ここでエラーページが表示されたら、 http://localhost:8000/ ではなく、 http://localhost:8000/polls/ にアクセスしていることを確認してください。
基本的なリクエストとレスポンスのフローに馴染んだら、データベースを使った作業を始めるために チュートリアルその2 を読みましょう。