Djangoブログプロジェクト

この章では、ゼロからDjangoを使ってブログプロジェクトを作成し、プロジェクト構造とリクエストのライフサイクルを理解します。


環境準備

DjangoはPython Webフレームワークです。まずPython環境を確認する必要があります。

ターミナルを開き、Pythonのバージョン(3.8以上が必要)を確認します:

$ python3 --version
Python 3.12.0

仮想環境の作成とDjangoのインストール

仮想環境はPythonプロジェクトの標準的なプラクティスであり、各プロジェクトが独立した依存関係を持ち、互いに干渉しません。

$ python3 -m venv venv               # 创建虚拟环境
$ source venv/bin/activate           # 激活虚拟环境(Windows:venv\Scripts\activate)
(venv) $ pip install django          # 在虚拟环境中安装 Django

インストールが成功したか確認します:

(venv) $ python -m django --version
5.0

新しいターミナルを開くたびに、まず実行する必要がありますsource venv/bin/activate仮想環境をアクティブにします。ターミナルのプロンプトの前にある(venv)は、現在仮想環境にいることを示します。


Djangoプロジェクトの作成

Djangoはdjango-admin startprojectコマンドでプロジェクトを初期化します。

(venv) $ django-admin startproject blog_project
(venv) $ cd blog_project

実行後、以下のディレクトリ構造が生成されます:

blog_project/
├── manage.py                    # 项目管理入口(启动服务器、执行迁移、创建 admin 等)
├── blog_project/                # 项目配置包
│   ├── __init__.py              # 标识这是一个 Python 包
│   ├── settings.py              # 全局配置(数据库、中间件、模板、静态文件等)
│   ├── urls.py                  # 根 URL 路由表
│   ├── wsgi.py                  # WSGI 部署入口(生产环境用)
│   └── asgi.py                  # ASGI 部署入口(WebSocket 用)

開発サーバーの起動

(venv) $ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
Starting development server at http://127.0.0.1:8000/

ブラウザで http://127.0.0.1:8000/ にアクセスし、Djangoのウェルカムページが表示されれば起動成功です。

開発サーバーにはホットリロード機能が付いています:コードを変更して保存すると、サーバーが自動的に再起動します。Ctrl+Cでサーバーを停止します。


settings.pyの主要設定説明

settings.pyはDjangoプロジェクトの中心的な設定ファイルであり、各設定項目には明確な意味があります。

設定項目デフォルト値役割
DEBUGTrue開発モード(本番公開後はFalseに設定する必要があります)
DATABASESSQLiteデータベース設定(デフォルトはSQLite、追加インストール不要)
INSTALLED_APPS組み込みアプリの一覧プロジェクトに登録されているアプリ
TEMPLATESDjangoTemplatesテンプレートエンジンの設定
LANGUAGE_CODE'en-us'言語('zh-hans'に変更可能)
TIME_ZONE'UTC'タイムゾーン('Asia/Shanghai'に変更可能)

言語とタイムゾーンを中国語環境に変更します:

例

# ファイルパス:blog_project/settings.py
LANGUAGE_CODE = 'zh-hans'      # 管理画面を中国語で表示
TIME_ZONE = 'Asia/Shanghai'    # タイムゾーンを北京時間に設定

最初のアプリを作成する:blog

Djangoのプロジェクト構成方式はプロジェクト(Project)が複数のアプリ(App)を含む。

各Appは独立した機能モジュール(例:ブログ、ユーザー、コメント)を担当します。

(venv) $ python manage.py startapp blog

実行後、blog/ ディレクトリが生成されます:

blog/
├── __init__.py
├── admin.py       # 后台管理配置(第三章用到)
├── apps.py        # 应用配置
├── models.py      # 数据库模型(第二章用到)
├── views.py       # 视图函数(本章用到)
├── urls.py        # 需要手动创建(应用级路由)
└── migrations/    # 数据库迁移文件(第二章用到)

Appを作成した後、settings.pyで登録する必要があります:

例

# ファイルパス:blog_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',                      # 追加:blogアプリを登録
]

Djangoリクエストのライフサイクル

リクエストがDjango内で処理される流れを理解すると、後で問題を迅速に特定するのに役立ちます。

ブラウザでURLを入力 → urls.pyがルートを照合 → views.pyがロジックを処理 → templatesがHTMLをレンダリング → ブラウザに返却。

この3ステップ(URL → View → Template)はDjango開発の骨格となるパターンです。


実践:最初のDjangoページ

ステップ1:ビュー関数を作成する(views.py)

例

# ファイルパス:blog/views.py
from django.shortcuts import render

# ビュー関数:requestを受け取り、responseを返す
def index(request):
    # renderの役割:request + テンプレート + データを組み合わせ、HTMLレスポンスを返す
    return render(request, 'blog/index.html', {
        'welcome': 'サンプルブログへようこそ',
        'intro': 'これはDjangoで構築された個人ブログ紹介サイトです。'
    })

ステップ2:テンプレートファイルを作成する(templates)

blog/ ディレクトリの下にtemplates/blog/サブディレクトリを作成し、次にindex.html。

例

<!-- ファイルパス:blog/templates/blog/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>サンプルブログ</title>
    <style>
        body { font-family: sans-serif; max-width: 800px; margin: 0 auto; padding: 40px 20px; }
        h1 { color: #2c3e50; }
    </style>
</head>
<body>
    <h1>{{ welcome }}</h1>
    <p>{{ intro }}</p>
</body>
</html>

Djangoのテンプレート変数は{{ 変数名 }}構文を使用し、Vue3の補間式と同じです。views.pyでrenderに渡した辞書データは、テンプレート内で直接使用できます。

ステップ3:ルーティングを設定する(urls.py)

まず blog/ の下にurls.pyをアプリレベルルーティングとして作成します。

例

# ファイルパス:blog/urls.py
from django.urls import path
from . import views

# アプリのルーティングテーブル
urlpatterns = [
    path('', views.index, name='index'),  # 空のパスは / ホームページに一致
]

次にプロジェクトレベルのurls.pyでinclude()を使用してアプリのルーティングを組み込みます:

例

# ファイルパス:blog_project/urls.py
from django.contrib import admin
from django.urls import path, include          # includeをインポート

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),            # blogアプリのルーティングをルートパスに接続
]

本章のまとめ

この章では3つのことを達成しました:仮想環境の作成とDjangoのインストール、startproject/startappによるプロジェクトの初期化、View → Template → URLの完全な流れの作成です。

主な収穫:Djangoのプロジェクト/アプリの階層構造を理解し、URL → View → Templateの3ステップ開発パターンを習得しました。

その他の拡張