はじめての Django アプリ作成、その 1Link to this heading
さあ、例を交えながら学んでゆきましょう。
このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。
Poll アプリケーションは 2 つの部分からなります:
ユーザが投票したり結果を表示したりできる公開用サイト
投票項目の追加、変更、削除を行うための管理 (admin) サイト
Django は既にインストール済み として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト(先頭の $ は入力待ちを示す記号です)で実行します。
Linux / macOS
$ python -m django --version
Windows
...\> py -m django --version
Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ "No module named django" とエラーが表示されます。
このチュートリアルは Django 2.2 と Python 3.5 以降を対象に書かれています。Django のバージョンが合わなければ、このページの右下にあるバージョンスイッチャーを使用して、 インストールされている Django のチュートリアルを参照するか、最新の Django にアップデートしてください。古いバージョンの Python を使用している場合は、 どのバージョンの Python で Django が使えますか? を確認して、Django の互換性のあるバージョンを見つけてください。
Django の旧バージョンを削除して新しいものをインストールする場合は、 Django のインストール方法 が参考になるでしょう。
プロジェクトを作成するLink to this heading
初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django の プロジェクト (project) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。
コマンドラインから、コードを置きたい場所に cd して、以下のコマンドを 実行してください。
Linux / macOS
$ django-admin startproject mysite
Windows
...\> django-admin startproject mysite
これを実行すると、現在のディレクトリに mysite ディレクトリが作成されます。動作しなければ django-admin 実行時の問題 を参照してください。
startproject が何を作成したかをみてみましょう:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
ファイルはそれぞれ以下のような役割を持っています:
外側の
mysite/ルートディレクトリは、このプロジェクトのただの入れ物です。 この名前は Django に関係しませんので、好きな名前に変更できます。manage.py: Django プロジェクトに対する様々な操作を行うためのコマンドラインユーティリティです。詳しくは django-admin と manage.py 内のmanage.pyを参照してください。内側の
mysite/ディレクトリは、このプロジェクトの実際の Python パッケージです。この名前が Python パッケージの名前であり、 import の際に 使用する名前です (例えば importmysite.urls) 。mysite/__init__.py: このディレクトリが Python パッケージであることを Python に知らせるための空のファイルです。Python の初心者は、 Python の公式 ドキュメントの more about packages を読んで下さい。mysite/settings.py: Django プロジェクトの設定ファイルです。 設定の仕組みは Djangoの設定 を参照してください。mysite/urls.py: Django プロジェクトの URL 宣言、いうなれば Django サイトにおける「目次」に相当します。詳しくは URL ディスパッチャ を参照 してください。mysite/wsgi.py: プロジェクトをサーブするためのWSGI互換Webサーバーとのエントリーポイントです。詳細は WSGI とともにデプロイするには を参照してください。
開発用サーバーLink to this heading
Django のプロジェクトがうまく動作するか確認しましょう。外側の mysite ディレクトリに移動ができたら下記のコマンドを実行してください:
Linux / macOS
$ python manage.py runserver
Windows
...\> 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. 2026年08月09日 - 15:50:53 Django version 2.2, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
これで、 Django 開発サーバを起動しました。 Django 開発サーバは Python だけで書かれた軽量な Web サーバです。このサーバは、開発を迅速に行い、運用に適した状態になるまで Apache のような運用サーバの設定をいじらなくても良いようにするためのものです。
ここでちょっと注意しておきましょう。このサーバは開発中の利用だけを考えて作られています。絶対に運用環境では 使わないでください (筆者たちの専門は Web フレームワークであって、Web サーバではありません)。
さあ、これでサーバが起動したので、ブラウザで http://127.0.0.1:8000/ にアクセスしてみてください。 "Congratulations!" と表示された、ロケットが離陸しているページが出るはずです。やりましたね!
Polls アプリケーションをつくるLink to this heading
さあ、これで自分用の環境、すなわちプロジェクトが立ち上がり、作業にとりかかる準備ができました。
Django 内に追加する各アプリケーションは、所定の規約に従った Python パッケージで構成されます。 Django には基本的なディレクトリ構造を自動生成するユーティリティが含まれているので、ディレクトリを作ることではなくコードを書くことに集中できます。
アプリケーションは Python path のどこにでも置けます。このチュートリアルでは投票アプリケーションを manage.py のすぐ隣に作ります。なので、 mysite のサブモジュールとしてでなく、トップレベルのモジュールとしてインポートできます。
アプリケーションを作るには、 manage.py と同じディレクトリに入って、このコマンドを実行します:
Linux / macOS
$ python manage.py startapp polls
Windows
...\> py manage.py startapp polls
このコマンドは polls というディレクトリを作成します。中身はこのようになっています:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
このディレクトリ構造が、 poll アプリケーションの全体像です。
はじめてのビュー作成Link to this heading
最初のビューを書いてみましょう。 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 が必要です。
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 ファイルには以下のコードを書いてください:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
次のステップはルートのURLconfに polls.urls モジュールの記述を反映させることです。 mysite/urls.py に django.urls.include のimportを追加して、 urlpatterns のリストに include() を挿入します。するとこのようになります:
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 に紐付けることができました。下記のコマンドを実行して、動作を確認してください:
Linux / macOS
$ python manage.py runserver
Windows
...\> py manage.py runserver
ブラウザで http://localhost:8000/polls/ にアクセスすると、 "Hello, world. You're at the polls index." と表示されるのが確認できるでしょう。これはビューの index で定義したものです。
path() 関数は4つの引数を受け取ります。引数のうち route と view の2つは必須で、kwargs、name の2つは省略可能です。ここで、これらの引数がどのようなものか見てみましょう。
path() 引数: routeLink to this heading
route は URL パターンを含む文字列です。リクエストを処理するとき、Django は urlpatterns のはじめのパターンから開始し、リストを順に下に見ていきます。要求された URL を一致するものを見つけるまで各パターンと比較します。
パターンはGETやPOSTのパラメーター、そしてドメイン名を検索しません。例えば、 https://www.example.com/myapp/ へのリクエストにおいては、URLconfは myapp/ を見ます。 https://www.example.com/myapp/?page=3 へのリクエストにおいても、URLconfは myapp/ を見ます。
path() 引数: viewLink to this heading
Django がマッチする正規表現を見つけると、 Django は指定されたビュー関数を呼び出します。その際は HttpRequest オブジェクトを第一引数に、そしてキーワード引数としてrouteから「キャプチャされた」値を呼び出します。この例はこの後すぐ出てきます。
path() 引数: kwargsLink to this heading
任意のキーワード引数を辞書として対象のビューに渡せます。この機能はチュートリアルでは使いません。
path() 引数: nameLink to this heading
URL に名前付けをしておけば Django のどこからでも明確に参照でき、とくにテンプレートの中で有効です。この便利な機能のおかげで、プロジェクトのURLにグローバルな変更を加える場合にも1つのファイルを変更するだけで済むようになります。
基本的なリクエストとレスポンスのフローに馴染んだら、データベースを使った作業を始めるために チュートリアルその2 を読みましょう。