19.

Django クイックスタート/チュートリアル完全ガイド(pip install から polls アプリまで)

編集
この記事の要点
  • 最短ルート: pip install djangodjango-admin startproject myprojectpython manage.py runserver
  • http://127.0.0.1:8000/ でロケット画面が出れば成功
  • アプリ追加: python manage.py startapp pollsINSTALLED_APPS 追記 → Model → migrate → URL → View → Template
  • 公式 polls チュートリアル 7 パート(はじめての Django アプリ作成)でフレームワーク全体像を網羅
  • Django Girls Tutorial(日本語あり)は HTML/CSS から丁寧に解説、初心者の定番

Django とは(30 秒で)

Django は Python 製のフルスタック Web フレームワークで、「電池付き (batteries included)」が哲学。ORM、URL ルーティング、テンプレートエンジン、認証、管理画面、フォーム処理が標準搭載され、ニュースサイト用に作られた歴史から CMS / ブログ / 管理ツール用途に強い。Instagram、Pinterest、Disqus、Mozilla.org でも採用。

STEP 0: 前提

  • Python 3.10 以上(Django 5.x の場合)
  • pip が使える
  • 仮想環境(venv / uv / poetry のいずれか)
python3 --version    # 3.10+
pip --version

STEP 1: 仮想環境作成と Django インストール

# プロジェクト用ディレクトリ
mkdir mysite
cd mysite

# 仮想環境
python3 -m venv .venv
source .venv/bin/activate    # Linux/Mac
# .venv\Scripts\Activate.ps1  # Windows

# Django インストール
pip install --upgrade pip
pip install django

# バージョン確認
django-admin --version

STEP 2: プロジェクト作成

django-admin startproject myproject .
# 末尾の "." で カレントディレクトリに直接展開

# 生成される構造
# mysite/
# ├── manage.py            ← プロジェクトの司令塔
# ├── myproject/
# │   ├── __init__.py
# │   ├── settings.py      ← 設定ファイル
# │   ├── urls.py          ← URL ルーティング
# │   ├── asgi.py          ← ASGI エントリポイント
# │   └── wsgi.py          ← WSGI エントリポイント
# └── .venv/

STEP 3: 開発サーバを起動

# 初期マイグレーション(標準テーブル作成)
python manage.py migrate

# サーバ起動(デフォルト 8000 ポート)
python manage.py runserver

# 別ポート
python manage.py runserver 8080

# 外部からアクセス可能に
python manage.py runserver 0.0.0.0:8000

ブラウザで http://127.0.0.1:8000/ を開くと「The install worked successfully!」のロケット画面が表示されれば成功です。

STEP 4: アプリを作る (polls)

Django の「プロジェクト」は複数の「アプリ」の集合体です。1 つのアプリが 1 つの機能領域に対応します:

python manage.py startapp polls

# polls/
# ├── __init__.py
# ├── admin.py        ← 管理画面の設定
# ├── apps.py         ← アプリのメタ情報
# ├── migrations/     ← DB マイグレーション
# ├── models.py       ← データ定義
# ├── tests.py        ← テスト
# └── views.py        ← リクエスト処理

myproject/settings.pyINSTALLED_APPS に追加:

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig',   # ★ 追加
]

STEP 5: Model(データ定義)

# polls/models.py
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text
# マイグレーションファイル生成
python manage.py makemigrations polls
# Migrations for 'polls':
#   polls/migrations/0001_initial.py
#     - Create model Question
#     - Create model Choice

# DB に反映
python manage.py migrate

# 何が実行されるか確認
python manage.py sqlmigrate polls 0001

STEP 6: 管理画面で確認

# スーパーユーザ作成
python manage.py createsuperuser
# Username: admin
# Email: admin@example.com
# Password: ********
# Password (again): ********

# サーバ起動
python manage.py runserver

# → http://127.0.0.1:8000/admin/ にログイン
# polls/admin.py
from django.contrib import admin
from .models import Question, Choice

admin.site.register(Question)
admin.site.register(Choice)

管理画面に Question / Choice が表示され、ブラウザから追加 / 編集 / 削除できます。

STEP 7: View と URL

# polls/views.py
from django.http import HttpResponse
from django.shortcuts import render
from .models import Question

def index(request):
    latest_questions = Question.objects.order_by('-pub_date')[:5]
    return render(request, 'polls/index.html', {
        'latest_questions': latest_questions,
    })

def detail(request, question_id):
    question = Question.objects.get(pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})
# polls/urls.py
from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('/', views.detail, name='detail'),
]

# myproject/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

STEP 8: Template

{# polls/templates/polls/index.html #}
{% if latest_questions %}

{% else %}

No polls yet.

{% endif %}

これで http://127.0.0.1:8000/polls/ にアクセスすると質問一覧が表示されます。

Django の MTV パターン

MVC ではなく、Django は MTV (Model / Template / View) を採用:

レイヤ役割ファイル
Modelデータ定義と DB アクセスmodels.py
Template表示テンプレート(HTML)templates/
Viewリクエスト処理(一般的な MVC のコントローラ相当)views.py
URLConfルーティングurls.py

公式チュートリアル(はじめての Django アプリ作成)

Django 公式は polls アプリを段階的に作る 7 パート構成のチュートリアルを提供しています:

パートテーマ
1プロジェクト作成、初めての View、開発サーバ起動
2データベース、Model、admin サイト
3View、URL ルーティング、テンプレート
4フォーム、汎用 View(ListView / DetailView)
5テストを書く
6静的ファイル(CSS / 画像)
7admin のカスタマイズ

他の定番チュートリアル

名前特徴
Django Girls TutorialHTML/CSS から解説。日本語訳あり。初心者向け
Mozilla MDN Local Library図書館アプリで Django Best Practice を学ぶ
Real Python Django個別テーマを深掘り(テスト / 認証 / DRF)
Awesome DjangoGitHub の参考リソース集

つまずきやすいポイント

症状原因対処
TemplateDoesNotExisttemplates ディレクトリの場所が間違いアプリ内 templates// 配置 + INSTALLED_APPS 確認
NoReverseMatchURL 名の typo / app_name 不整合{% url 'polls:detail' q.id %} 形式を統一
You have NN unapplied migration(s)マイグレ忘れpython manage.py migrate
OperationalError: no such table新規 Model 後に makemigrations 忘れmakemigrationsmigrate
CSRF token missingPOST フォームに {% csrf_token %} 無しform タグ内に追加

次の学習ステップ

  1. Django REST Framework(DRF)で API 化
  2. Class-Based Views(汎用 View)への移行
  3. Bootstrap / Tailwind と組み合わせて UI
  4. PostgreSQL に切替
  5. Gunicorn + Nginx + Docker で本番デプロイ
  6. Celery で非同期タスク

FAQ

Q: startproject の最後の . は何?
A: 「カレントディレクトリに展開する」指示。省略すると myproject/myproject/ と入れ子になる。シンプルに展開したいなら . 付き推奨。

Q: 開発サーバを本番で使ってよい?
A: ダメ。runserver は開発専用で性能・セキュリティが本番向けでない。本番は Gunicorn / uWSGI + Nginx。

Q: SQLite から PostgreSQL に変えたい
A: DATABASES['default'] を変更 + psycopg2-binary インストール + migrate。データ移行は dumpdataloaddata

編集
Post Share
子ページ
  1. チュートリアル:電卓の作成
  2. MVCアプリケーション実装例
同階層のページ
  1. 環境構築とプロジェクト/アプリの作成
  2. MVC(MVT)のそれぞれの使い方と説明
  3. データベースへの接続と操作
  4. Django Administration
  5. git管理
  6. エラー一覧
  7. バージョンの確認方法
  8. ログ出力方法
  9. SQLのログ出力方法
  10. ログのローテート設定
  11. settings.pyの定数にアクセスする方法
  12. 本番環境へのインストールとアプリのデプロイ(apache編)
  13. 本番環境へのインストールとアプリのデプロイ(nginx編)
  14. djangoアプリの本番の開始URLを変更する
  15. 静的(static)ファイルの置き場所と読み込み(画像、css、js )
  16. CSRFトークンをAjaxで使用する方法
  17. ajaxの使用例(POST編)
  18. ファイルのアップロードとファイルの名前
  19. クイックスタート/チュートリアル
  20. ログイン機能
  21. テンプレート側のログイン判定
  22. ビュー側のログイン判定
  23. 管理者ユーザーの作成/判定と管理画面
  24. モデルのjson化とレスポンス
  25. runserverでポートを指定する方法
  26. cronによるバッチ実行
  27. テンプレートで利用する共通のcontextを定義する方法
  28. プログラムが本番サーバーで反映されない場合の対処法
  29. APIの作成
  30. cron用コマンド・ファイルの作成