はじめての Django アプリ作成、その 1¶
さあ、例を交えながら学んでゆきましょう。
このチュートリアルでは、簡単な投票 (poll) アプリケーションの作成に取り組ん でもらいます。
Poll アプリケーションは 2 つの部分からなります:
ユーザが投票したり結果を表示したりできる公開用サイト
投票項目の追加、変更、削除を行うための管理 (admin) サイト
Django は既にインストール済み として説明を進めます。Django がインストールされているかどうか、またどのバージョンがインストールされているかを調べるには、以下のコマンドをシェルプロンプト(先頭の $ は入力待ちを示す記号です)で実行します。
$ python -m django --version
...\> py -m django --version
Django がインストールされていれば、インストールされている Django のバージョンがわかります。もしなければ "No module named django" とエラーが表示されます。
This tutorial is written for Django 6.0, which supports Python 3.12 and later. If the Django version doesn't match, you can refer to the tutorial for your version of Django by using the version switcher at the bottom right corner of this page, or update Django to the newest version. If you're using an older version of Python, check どのバージョンの Python で Django が使えますか? to find a compatible version of Django.
困ったときは:
このチュートリアルの実行に問題がある場合は、FAQ の Getting Help セクションに進んでください。
プロジェクトを作成する¶
初めて Django を使うのなら、最初のセットアップを行う必要があります。通常は、 Django のプロジェクト (project) を構成するコードを自動生成します。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などといった、個々の Django インスタンスの設定を集めたものです。
From the command line, cd into a directory where you'd like to store your
code and run the following command to bootstrap a new Django project:
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
This will create a directory djangotutorial with a project called
mysite inside. The directory name doesn't matter to Django; you can rename
it to anything you like. If it didn't work, see
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: Settings/configuration for this Django project. Djangoの設定 will tell you all about how settings work.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. 12月 03, 2025 - 15:50:53 Django version 6.0, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead. For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/
注釈
適用されていないデータベースマイグレーションについての警告はここでは無視します、後ほどすぐにデータベースとともにたっぷりと取り組みます。
さあ、これでサーバが起動したので、ブラウザで 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 コードを書いてください:
polls/views.py¶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 というファイルを作成します。
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() を追加します。つまり、次のようにします。
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),
]
path() 関数には少なくとも2つの引数、route と view が必要です。include() 関数は、他のURLconfを参照するのに使います。Djangoが include() を見つけると、これまでに一致したURLの部分を切り捨て、残りの文字列をインクルードされたURLconfに渡して、さらに処理を続けます。
include() の背景にある考えは、 URL を簡単にプラグ & プレイ可能にすることです。 polls には独自の URLconf (polls/urls.py) を持っているので、 "/polls/" 、 "/fun_polls/" や、 "/content/polls/" といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。
When to use 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 を読みましょう。