はい、承知いたしました。
「5ステップで学ぶDjangoチュートリアル:環境構築からアプリ作成まで」の詳細な説明を含む、約5000語の記事を作成します。以下、記事本文です。
5ステップで学ぶDjangoチュートリアル:環境構築からアプリ作成まで
はじめに
Web開発の世界へようこそ!このチュートリアルでは、Pythonで最も人気のあるWebフレームワークの一つである「Django(ジャンゴ)」を使って、ゼロからWebアプリケーションを構築する方法を5つのステップに分けて、詳細に解説していきます。
Djangoとは?
Djangoは、Pythonで書かれた高レベルなWebアプリケーションフレームワークです。その最大の特徴は「The web framework for perfectionists with deadlines(締め切りを持った完璧主義者のためのWebフレームワーク)」という思想にあります。開発者が面倒な作業に時間を費やすことなく、アプリケーションの本質的な部分の開発に集中できるように、多くの便利な機能が標準で提供されています。この哲学は「Batteries Included(バッテリー同梱)」とも呼ばれ、認証機能、管理画面、ORM(Object-Relational Mapper)などが最初から組み込まれています。
DjangoはMTV(Model-Template-View)アーキテクチャを採用しており、データの管理(Model)、ユーザーへの表示(Template)、そしてその仲立ちをするロジック(View)を明確に分離することで、コードの整理と再利用を容易にしています。
このチュートリアルの目的と対象読者
このチュートリアルの目的は、Web開発が初めての方や、Djangoを学び始めたばかりの方が、環境構築から簡単なWebアプリケーション(今回はブログアプリを想定)を作成するまでの一連の流れを体系的に理解し、自力で開発をスタートできるようになることです。
以下の読者を対象としています。
- Pythonの基本的な文法(変数、関数、クラスなど)を理解している方
- Webアプリケーションの仕組みに興味がある方
- プログラミングで何か具体的なものを作ってみたいと考えている方
専門用語は都度解説を加えながら進めますので、安心して読み進めてください。約5000語にわたる詳細なガイドで、あなたのDjango学習の第一歩を力強くサポートします。
それでは、早速最初のステップから始めましょう!
ステップ1:開発環境の構築
どんな素晴らしいアプリケーションも、まずは安定した開発環境を整えることから始まります。このステップでは、Pythonのインストール、プロジェクトごとに独立した環境を作るための「仮想環境」の構築、そして主役であるDjangoのインストールを行います。
1. Pythonのインストール
DjangoはPython製のフレームワークなので、当然ながらPythonが必須です。もしお使いのコンピュータにPythonがインストールされていない場合は、公式サイトからインストールしましょう。
- 公式サイトへアクセス: python.org にアクセスします。
- ダウンロード: トップページの「Downloads」メニューから、お使いのOS(Windows, macOSなど)に合った最新の安定版インストーラーをダウンロードします。
- インストール: ダウンロードしたインストーラーを実行します。
- Windowsの場合: インストールウィザードの最初の画面で、「Add Python X.X to PATH」(Python X.XをPATHに追加)というチェックボックスに必ずチェックを入れてください。これを忘れると、コマンドプロンプトで
python
コマンドが認識されず、後の作業が非常に面倒になります。 - macOSの場合: 基本的にウィザードの指示に従って進めれば問題ありません。
- Windowsの場合: インストールウィザードの最初の画面で、「Add Python X.X to PATH」(Python X.XをPATHに追加)というチェックボックスに必ずチェックを入れてください。これを忘れると、コマンドプロンプトで
インストールが完了したら、コマンドプロンプト(Windows)またはターミナル(macOS/Linux)を開き、以下のコマンドを実行して正しくインストールされたか確認します。
bash
python --version
pip --version
Python 3.x.x
のようにバージョン番号が表示されれば成功です。pip
はPythonのパッケージ管理ツールで、Djangoなどのライブラリをインストールする際に使用します。
2. 仮想環境の作成と有効化
次に「仮想環境」を作成します。なぜ仮想環境が必要なのでしょうか?
複数のプロジェクトを開発していると、プロジェクトAでは「Djangoバージョン4.0」が、プロジェクトBでは「Djangoバージョン3.2」が必要になる、といった状況が起こり得ます。もし全てのライブラリをコンピュータ全体で共有する「グローバル環境」にインストールしてしまうと、このようなバージョン違いに対応できません。
仮想環境は、プロジェクトごとに独立したPython環境を作成する仕組みです。これにより、各プロジェクトが必要とするライブラリのバージョンを他のプロジェクトに影響を与えることなく管理できます。
ここでは、Python 3.3以降に標準で搭載されている venv
モジュールを使って仮想環境を作成します。
-
プロジェクト用ディレクトリの作成: まず、チュートリアル用の作業ディレクトリを作成し、そこに移動します。
bash
mkdir django_tutorial
cd django_tutorial -
仮想環境の作成: 次のコマンドで、
myenv
という名前の仮想環境を作成します。bash
python -m venv myenvこのコマンドを実行すると、カレントディレクトリに
myenv
というフォルダが作成され、その中に独立したPython環境が構築されます。 -
仮想環境の有効化(アクティベート): 作成しただけでは仮想環境は使えません。有効化(アクティベート)する必要があります。OSによってコマンドが異なります。
-
Windows (コマンドプロンプト):
bash
myenv\Scripts\activate -
macOS / Linux (bash/zsh):
bash
source myenv/bin/activate
コマンドが成功すると、コマンドプロンプトの行頭に
(myenv)
のような表示が追加されます。これが仮想環境が有効になっている印です。これ以降、pip
でインストールするパッケージは、このmyenv
環境内にのみインストールされます。仮想環境を無効化(ディアクティベート)したい場合は、単に
deactivate
と入力します。 -
3. Djangoのインストール
仮想環境が有効になった状態で、いよいよDjangoをインストールします。Pythonのパッケージ管理ツール pip
を使います。
bash
pip install django
このコマンドで、PyPI(Python Package Index)から最新安定版のDjangoがダウンロードされ、現在の仮想環境にインストールされます。特定のバージョンをインストールしたい場合は pip install django==4.2
のように指定します。
インストールが完了したか確認しましょう。
bash
python -m django --version
4.x.x
のようなバージョン番号が表示されれば、Djangoのインストールは成功です。また、pip freeze
コマンドを実行すると、現在この仮想環境にインストールされているパッケージの一覧を確認できます。
bash
pip freeze
Django==...
という行が含まれているはずです。
これで開発環境の準備は完了です。次のステップでは、この環境にDjangoプロジェクトを作成していきます。
ステップ2:Djangoプロジェクトの作成と初期設定
開発環境が整ったら、次はWebアプリケーションの「骨格」となるDjangoプロジェクトを作成します。プロジェクトは、設定やアプリケーション全体をまとめるコンテナのようなものです。
1. Djangoプロジェクトの作成
Djangoには、プロジェクトの雛形を自動で生成してくれる便利なコマンドが用意されています。仮想環境が有効化されていることを確認し、django_tutorial
ディレクトリ内で以下のコマンドを実行します。
bash
django-admin startproject myproject .
このコマンドを詳しく見てみましょう。
* django-admin
: Djangoの様々な管理タスクを実行するためのコマンドラインユーティリティです。
* startproject
: 新しいプロジェクトを作成するコマンドです。
* myproject
: 作成するプロジェクトの名前です。この名前はPythonのパッケージ名としても使われます。
* .
(ドット): プロジェクトをカレントディレクトリ(django_tutorial
)に作成することを意味します。もしドットを付けないと、django_tutorial
の中にさらに myproject
というディレクトリが作られ、階層が一つ深くなってしまいます。多くの場合、カレントディレクトリに作成する方が管理しやすいため、ドットを付けることを推奨します。
コマンド実行後、ディレクトリ構造は以下のようになっているはずです。
django_tutorial/
├── myenv/ <-- 仮想環境
├── manage.py <-- プロジェクト管理用スクリプト
└── myproject/ <-- プロジェクトのPythonパッケージ
├── __init__.py
├── settings.py <-- プロジェクトの設定ファイル
├── urls.py <-- URLディスパッチャー
├── asgi.py
└── wsgi.py
それぞれのファイル・ディレクトリの役割を簡単に説明します。
manage.py
:django-admin
とほぼ同じ機能を持つ、プロジェクト固有の管理スクリプトです。開発サーバーの起動、データベースの操作、アプリケーションの作成など、今後の作業で頻繁に使用します。myproject/
: プロジェクト本体のPythonパッケージです。myproject/__init__.py
: このディレクトリがPythonパッケージであることを示すための空のファイルです。myproject/settings.py
: データベース接続情報、タイムゾーン、インストール済みアプリの一覧など、プロジェクトの全ての設定が記述されている最重要ファイルです。myproject/urls.py
: サイトのURLと、それに対応する処理(ビュー)を紐付ける「目次」のようなファイルです。asgi.py
/wsgi.py
: WebサーバーとDjangoアプリケーションを接続するための設定ファイルです。(現段階では深く気にする必要はありません)
2. 開発サーバーの起動
Djangoには、開発用の軽量なWebサーバーが内蔵されています。manage.py
を使って、このサーバーを起動してみましょう。
bash
python manage.py runserver
コマンドを実行すると、以下のようなメッセージが表示されます。
“`
Watching for file changes with StatReloader
Performing system checks…
System check identified no issues (0 silenced).
…
Django version 4.x.x, using settings ‘myproject.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-C.
“`
このメッセージは、開発サーバーが http://127.0.0.1:8000/
で起動したことを示しています。Webブラウザを開き、このアドレスにアクセスしてみてください。ロケットが飛び立つイラストと共に「The install worked successfully! Congratulations!」というページが表示されれば、プロジェクトの作成は成功です。
この開発サーバーは、コードを変更すると自動的に再起動してくれるので、開発中は非常に便利です。サーバーを停止するには、ターミナルで Ctrl + C
を押してください。
3. 初期設定の確認と変更
次に、プロジェクトの基本的な設定を行いましょう。myproject/settings.py
ファイルをテキストエディタで開きます。多くの設定項目がありますが、ここでは特に重要なものをいくつか変更します。
-
LANGUAGE_CODE
(言語設定):
デフォルトでは'en-us'
(英語) になっています。これを日本語に変更しましょう。管理画面などが日本語で表示されるようになります。“`python
変更前
LANGUAGE_CODE = ‘en-us’
変更後
LANGUAGE_CODE = ‘ja’
“` -
TIME_ZONE
(タイムゾーン設定):
デフォルトは'UTC'
(協定世界時) です。これを日本のタイムゾーンに変更します。データベースに日時を保存する際などに影響します。“`python
変更前
TIME_ZONE = ‘UTC’
変更後
TIME_ZONE = ‘Asia/Tokyo’
“`
これらの他にも、DEBUG
(本番環境では False
にする)、ALLOWED_HOSTS
(本番環境でアクセスを許可するドメインを設定)、DATABASES
(使用するデータベースの種類や接続情報を設定)など、重要な設定がありますが、現段階ではデフォルトのままで問題ありません。
4. データベースのマイグレーション
settings.py
を見ると、DATABASES
設定で sqlite3
が使われるようになっているのが分かります。これはファイルベースの簡単なデータベースで、開発初期段階には最適です。
Djangoには、認証機能やセッション管理機能など、最初からいくつかの機能(アプリ)が組み込まれています。これらの機能は、データベース上にテーブルを作成する必要があります。そのテーブルを作成するためのコマンドが migrate
です。
ターミナルで以下のコマンドを実行してください。
bash
python manage.py migrate
このコマンドを実行すると、INSTALLED_APPS
に登録されているアプリが必要とするデータベーステーブルが自動的に作成されます。実行後、プロジェクトのルートディレクトリに db.sqlite3
というファイルが生成されているはずです。これがSQLite3のデータベースファイル本体です。
「マイグレーション」とは、モデル(後述)の定義と実際のデータベースの状態を同期させるための仕組みです。モデルに変更を加えるたびに、このマイグレーションの仕組みを使ってデータベースにその変更を反映させていきます。
これで、プロジェクトの骨格が完成し、基本的な設定とデータベースの準備が整いました。
ステップ3:Djangoアプリケーションの作成とモデルの定義
Djangoでは、プロジェクトという大きな枠組みの中に、「アプリケーション」という単位で機能を追加していきます。このステップでは、ブログ機能を持つアプリケーションを作成し、その中でブログ記事のデータを管理するための「モデル」を定義します。
1. Djangoアプリケーションとは?
プロジェクトとアプリケーションの違いを理解することは重要です。
- プロジェクト: Webサイト全体の設定とアプリケーションの集合体です。一つのプロジェクトには複数のアプリケーションを含めることができます。
- アプリケーション: 特定の機能(例:ブログ、アンケート、ユーザー管理など)を実現するための、再利用可能なPythonパッケージです。一つのアプリケーションは、複数のプロジェクトで使い回すことも可能です。
このチュートリアルでは、「ブログ」という機能を持つ blog
アプリケーションを作成します。
2. アプリケーションの作成
アプリケーションの作成も manage.py
を使います。以下のコマンドを実行してください。
bash
python manage.py startapp blog
これにより、blog
という名前のディレクトリが作成され、その中にアプリケーションの雛形となるファイル群が生成されます。
django_tutorial/
├── blog/ <-- 新しく作成されたアプリ
│ ├── migrations/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── myenv/
├── myproject/
├── db.sqlite3
└── manage.py
各ファイルの主な役割は以下の通りです。
* models.py
: データベースのテーブル構造を定義する「モデル」を記述します。
* views.py
: ユーザーからのリクエストを処理し、レスポンスを返すロジック(ビュー)を記述します。
* admin.py
: Djangoの強力な機能である管理サイトに関する設定を記述します。
* apps.py
: アプリケーション自体の設定ファイルです。
* tests.py
: アプリケーションのテストコードを記述します。
* migrations/
: データベースへの変更履歴(マイグレーションファイル)が格納されます。
3. アプリケーションの登録
アプリケーションを作成しただけでは、プロジェクトはまだその存在を認識していません。myproject/settings.py
を開き、この blog
アプリをプロジェクトに登録する必要があります。
INSTALLED_APPS
というリストを探し、リストの末尾に 'blog.apps.BlogConfig'
または単に 'blog'
を追加します。
“`python
myproject/settings.py
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘blog’, # この行を追加
]
``
blog` アプリのモデルやビュー、URLなどを認識できるようになりました。
これで、Djangoプロジェクトは
4. モデルの定義
いよいよ、アプリケーションの核となる「モデル」を定義します。モデルは、アプリケーションが扱うデータの構造を定義するもので、Pythonのクラスとして表現されます。DjangoのORM(Object-Relational Mapper)が、このPythonクラスとデータベースのテーブルを自動的に結びつけてくれます。SQLを直接書かなくても、Pythonコードでデータベースを操作できるようになる非常に強力な機能です。
今回はブログの記事を表す Post
モデルを作成します。blog/models.py
を開き、以下のように編集してください。
“`python
blog/models.py
from django.db import models
from django.utils import timezone
class Post(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
“`
コードを詳しく見ていきましょう。
class Post(models.Model):
:Post
という名前のモデルを定義しています。models.Model
を継承することで、Djangoのモデルとしての機能を使えるようになります。title
,text
,created_date
,published_date
: これらはモデルの「フィールド」と呼ばれ、データベースのテーブルにおけるカラムに相当します。models.CharField(max_length=200)
: 文字数が制限されたテキストフィールド(VARCHAR
型)です。max_length
は必須の引数です。models.TextField()
: 文字数制限のない長いテキストフィールド(TEXT
型)です。models.DateTimeField()
: 日付と時刻を格納するフィールドです。default=timezone.now
: レコード作成時のデフォルト値として、現在時刻を設定します。blank=True, null=True
: このフィールドは空(blank
)でもよく、データベース上ではNULL
を許容することを示します。公開日(published_date
)は、下書き状態の記事では未設定になるため、この設定が必要です。
publish(self)
: モデルに属するメソッドです。この記事を「公開」する際に呼び出され、published_date
に現在時刻をセットして保存します。__str__(self)
: Pythonの特殊メソッドです。このオブジェクト(この場合は特定のPostオブジェクト)が文字列として表現される際に、title
フィールドの値を返すように設定しています。これにより、管理画面などでオブジェクトが分かりやすく表示されます。
5. モデルの変更をデータベースに反映
モデルを定義(または変更)したら、その変更内容をデータベースに伝える必要があります。このプロセスは2つのステップで行います。
-
マイグレーションファイルの作成 (
makemigrations
):
Djangoにモデルの変更点を検知させ、それを「設計図」(マイグレーションファイル)として書き出させます。bash
python manage.py makemigrations blogblog
アプリのモデルに変更があったことを伝え、マイグレーションファイルを作成するよう指示しています。成功すると、blog/migrations/
ディレクトリに0001_initial.py
のようなファイルが作成されます。このファイルには、Post
モデルに対応するテーブルを作成するためのPythonコードが記述されています。 -
データベースへの適用 (
migrate
):
作成したマイグレーションファイル(設計図)に基づいて、実際にデータベースにテーブルを作成(または変更)します。bash
python manage.py migrateこのコマンドを実行すると、
blog
アプリのマイグレーションが適用され、db.sqlite3
内にblog_post
というテーブルが作成されます。
モデルを定義し、それをデータベースに反映させることができました。これで、ブログ記事のデータを保存する準備が整いました。
ステップ4:Django管理サイトの活用
Djangoが「Batteries Included」と呼ばれる所以の一つが、この強力な「管理サイト」です。わずか数行のコードを追加するだけで、モデルのデータをブラウザから簡単に追加・編集・削除(CRUD操作)できる管理画面を自動で生成してくれます。
1. 管理サイトとは?
管理サイトは、サイトの管理者やコンテンツ編集者が、プログラミングの知識なしにサイトのデータを直接操作できるようにするための機能です。ステップ3で定義した Post
モデルをこの管理サイトに登録することで、ブログ記事の投稿や編集をWebインターフェース上で行えるようになります。
2. スーパーユーザーの作成
管理サイトにログインするためには、管理者権限を持つユーザー(スーパーユーザー)が必要です。manage.py
を使って作成しましょう。
bash
python manage.py createsuperuser
コマンドを実行すると、対話形式でユーザー名、メールアドレス、パスワードを尋ねられます。
- Username: 好きなユーザー名を入力します(例:
admin
)。 - Email address: メールアドレスを入力します。
- Password: パスワードを入力します。セキュリティのため入力内容は表示されませんが、確実に入力してください。
- Password (again): 確認のため、同じパスワードを再度入力します。
パスワードが簡単すぎると警告が出ることがありますが、開発環境ではそのまま進めて問題ありません。「Superuser created successfully.」と表示されれば成功です。
3. モデルを管理サイトに登録
スーパーユーザーを作成しましたが、このままでは管理サイトにログインしても、どのモデルを管理できるのかが表示されません。ステップ3で作成した Post
モデルを管理サイトに登録する必要があります。
blog/admin.py
ファイルを開き、以下のように編集します。
“`python
blog/admin.py
from django.contrib import admin
from .models import Post # 同じディレクトリにあるmodels.pyからPostモデルをインポート
Postモデルを管理サイトに登録
admin.site.register(Post)
“`
コードは非常にシンプルです。
1. from .models import Post
で、管理したい Post
モデルをインポートします。
2. admin.site.register(Post)
で、そのモデルを管理サイトに登録します。
たったこれだけです。
4. 管理サイトへのアクセスと操作
それでは、実際に管理サイトを使ってみましょう。
-
開発サーバーの起動: まず、開発サーバーを起動します。
bash
python manage.py runserver -
管理サイトへアクセス: Webブラウザで
http://127.0.0.1:8000/admin/
にアクセスします。 -
ログイン: Djangoのログイン画面が表示されます。先ほど作成したスーパーユーザーのユーザー名とパスワードでログインしてください。
-
管理画面の確認: ログインに成功すると、Djangoの管理サイトのホーム画面が表示されます。そこに「Blog」というセクションがあり、その中に「Posts」という項目があるはずです。これが登録した
Post
モデルです。 -
データの追加: 「Posts」の横にある「+ 追加」ボタンをクリックします。すると、
Post
モデルで定義したフィールド(Title, Text, Created date, Published date)に対応する入力フォームが表示されます。Title
とText
に適当な内容を入力してみましょう。Created date
はデフォルトで現在時刻が入っています。Published date
は今は空のままで構いません。- 右下の「保存」ボタンをクリックします。
-
データの確認と編集: 保存すると、Postの一覧画面に戻ります。今追加した記事がリストに表示されているはずです。
__str__
メソッドでtitle
を返すように設定したため、オブジェクトが分かりやすくタイトルで表示されています。
タイトルをクリックすると編集画面に移り、内容を修正したり、「削除」ボタンで削除したりできます。
いくつか記事を作成してみてください。公開日(Published date)を設定したものと、設定していないもの(下書き)を両方作っておくと、次のステップでの動作確認がしやすくなります。
この管理サイトを使えば、開発の初期段階でダミーデータを簡単に入力したり、アプリケーションのデータが正しく保存されているかを確認したりすることができ、開発効率が飛躍的に向上します。
ステップ5:ビュー、テンプレート、URLの作成(Webページの表示)
これまでのステップで、データの保存場所(モデル)とデータを管理する裏口(管理サイト)を用意しました。いよいよ最後のステップでは、Webサイトの「表側」、つまり一般のユーザーが目にするページを作成していきます。これには、DjangoのMVTアーキテクチャの残りの2つ、View(ビュー)とTemplate(テンプレート)が重要な役割を果たします。
1. MVTアーキテクチャの概要
ここで、DjangoのMVTアーキテクチャの役割分担を再確認しましょう。
- Model(モデル): データの構造を定義します。データベースとのやり取りを担当します。(ステップ3で作成済み)
- View(ビュー): ユーザーからのHTTPリクエストを受け取り、必要なデータをモデルから取得・加工し、どのテンプレートを使って表示するかを決定し、最終的なHTTPレスポンスを返します。アプリケーションの「ロジック」部分です。
- Template(テンプレート): 表示の「見た目」を担当するHTMLファイルです。ビューから渡されたデータを受け取り、動的にページを生成します。
- URL Dispatcher(URLディスパッチャー): ユーザーがアクセスしてきたURLを見て、どのビューを呼び出すかを振り分ける「交通整理係」です。
このステップでは、URL → View → Template という流れで処理が進み、最終的にWebページがブラウザに表示される仕組みを構築します。
2. URLの設定(URLconf)
まず、ユーザーがアクセスするURLと、それに対応するビューを紐付ける設定を行います。
a) プロジェクトのURLconfを編集
最初に、プロジェクト全体のURLの入り口である myproject/urls.py
を編集します。ここでは、特定のURL(例えば /
や /blog/
など)へのアクセスを、先ほど作成した blog
アプリケーションのURL設定に「委譲」するように設定します。
myproject/urls.py
を開き、以下のように編集してください。
“`python
myproject/urls.py
from django.contrib import admin
from django.urls import path, include # include をインポート
urlpatterns = [
path(‘admin/’, admin.site.urls),
path(”, include(‘blog.urls’)), # この行を追加
]
``
includeをインポートし、
path(”, include(‘blog.urls’))を追加しました。これは「ルートURL(例:
http://127.0.0.1:8000/)へのアクセスがあった場合、それ以降のURLの解釈を
blog.urls` というファイルに任せる」という意味です。
b) アプリケーションのURLconfを作成
次に、委譲先である blog
アプリケーション用のURL設定ファイルを作成します。blog
ディレクトリ内に、新しく urls.py
というファイルを作成し、以下の内容を記述します。
“`python
blog/urls.py (新規作成)
from django.urls import path
from . import views
urlpatterns = [
# ここにURLパターンを追加していく
]
“`
これで、URL設定の準備が整いました。これから作成するビューとURLパターンをここに追加していきます。
3. ビューの作成
ビューは、リクエストに応じて何をするかを定義するPython関数(またはクラス)です。blog/views.py
を編集して、ブログ記事の一覧ページと詳細ページを表示するための2つのビューを作成します。
“`python
blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Post
ブログ記事一覧を表示するビュー
def post_list(request):
# Postモデルから、公開日(published_date)が設定されていて、公開日の降順で記事を取得
posts = Post.objects.filter(published_date__isnull=False).order_by(‘-published_date’)
# render関数を使ってテンプレートにデータを渡し、HTTPレスポンスを生成
return render(request, ‘blog/post_list.html’, {‘posts’: posts})
ブログ記事詳細を表示するビュー
def post_detail(request, pk):
# URLから渡されたプライマリキー(pk)を使って、該当するPostオブジェクトを取得
# 該当するオブジェクトがない場合は404エラーを返す
post = get_object_or_404(Post, pk=pk)
return render(request, ‘blog/post_detail.html’, {‘post’: post})
“`
各ビュー関数の詳細です。
-
post_list(request)
:request
引数: Djangoがビューに渡すHTTPリクエストオブジェクトです。Post.objects.filter(...)
: DjangoのORMを使ってデータベースにクエリを発行しています。published_date
がNULL
でない(__isnull=False
)、つまり公開済みの記事のみをフィルタリングしています。.order_by('-published_date')
:-
を付けることで降順(新しいものが上)に並び替えています。render(request, 'blog/post_list.html', {'posts': posts})
:- 第1引数:
request
オブジェクト - 第2引数: 使用するテンプレートファイルへのパス
- 第3引数: テンプレートに渡すデータ(コンテキスト)を辞書形式で指定。ここでは、キー
posts
に、取得した記事のクエリセットを渡しています。
- 第1引数:
-
post_detail(request, pk)
:pk
引数: URLに含まれる記事のプライマリキー(データベース上のユニークなID)を受け取ります。get_object_or_404(Post, pk=pk)
:Post
モデルからpk
に一致するオブジェクトを1件取得しようとします。もし存在しない場合は、404 Not Foundエラーページを自動的に表示してくれる便利なショートカット関数です。
4. テンプレートの作成
ビューがデータを準備したら、次はそのデータを表示するためのHTMLテンプレートを作成します。
a) テンプレート用ディレクトリの作成
Djangoは、各アプリケーションのディレクトリ内にある templates
という名前のディレクトリを自動的に探します。しかし、単に blog/templates/
に置くだけでは、他のアプリに同名のテンプレートがあった場合に混同する可能性があります。これを避けるため、アプリケーションと同じ名前のサブディレクトリを作成するのが慣習です。
blog
ディレクトリ内に templates
ディレクトリを、さらにその中に blog
ディレクトリを作成します。
blog/templates/blog/
b) 記事一覧テンプレート (post_list.html
) の作成
blog/templates/blog/
内に post_list.html
というファイルを作成し、以下の内容を記述します。
“`html
My Django Blog
{% for post in posts %}
{{ post.title }}
Published: {{ post.published_date }}
{{ post.text|truncatewords:30|linebreaksbr }}
{% endfor %}
“`
c) 記事詳細テンプレート (post_detail.html
) の作成
同様に、blog/templates/blog/
内に post_detail.html
を作成します。
“`html
My Django Blog
{{ post.title }}
{% if post.published_date %}
Published: {{ post.published_date }}
{% endif %}
{{ post.text|linebreaksbr }}
“`
これらのファイルは Djangoテンプレート言語(DTL) を使って書かれています。
* {{ variable }}
: ビューから渡された変数の値を表示します。(例: {{ post.title }}
)
* {% tag %}
: for
ループや if
文などのロジックを記述します。(例: {% for post in posts %}
)
* |filter
: 変数にフィルタを適用して表示形式を変更します。(例: |linebreaksbr
は改行を <br>
タグに変換します)
* {% url 'name' pk=value %}
: URLの名前に基づいて、動的にURLを生成します。URL設定を後から変更してもテンプレートを修正する必要がなくなり、非常に便利です。
5. URLとビューの紐付け(最終段階)
最後に、作成したビューとURLパターンを blog/urls.py
で紐付けます。
blog/urls.py
を以下のように完成させてください。
“`python
blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
# http://127.0.0.1:8000/ へのアクセス
path(”, views.post_list, name=’post_list’),
# http://127.0.0.1:8000/post/1/ のようなアクセス
# <int:pk> は整数型のプライマリキー(pk)をキャプチャし、ビューに渡す
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
``
path関数の引数を説明します。
”
* 第1引数: URLパターン。はルートURLを示します。
はURLの一部をキャプチャして、
pkという名前の整数型引数としてビューに渡すことを意味します。
name
* 第2引数: 対応するビュー関数。
*引数: このURLパターンに名前を付けます。テンプレートの
{% url %}` タグでこの名前を使うことで、URLを逆引きできます。
6. 動作確認
全てのピースが揃いました。動作確認をしましょう。
- 開発サーバーが起動していることを確認します(停止していたら
python manage.py runserver
で起動)。 - ブラウザで
http://127.0.0.1:8000/
にアクセスします。post_list.html
が表示され、管理サイトで作成した公開済みの記事の一覧が表示されるはずです。
- 一覧ページで、いずれかの記事のタイトルをクリックします。
- URLが
http://127.0.0.1:8000/post/1/
のようになり、post_detail.html
が表示され、クリックした記事の詳細内容が表示されるはずです。
- URLが
おめでとうございます!これで、環境構築からデータベースの設計、データの管理、そしてWebページの表示まで、一通りの機能を備えたシンプルなブログアプリケーションが完成しました。
まとめと次のステップ
この長大なチュートリアルを通して、あなたはDjango開発の基本的なワークフローを体験しました。振り返ってみましょう。
- ステップ1: Python、仮想環境、Djangoをセットアップし、堅牢な開発基盤を築きました。
- ステップ2: Djangoプロジェクトを作成し、サーバーを起動。日本語化やタイムゾーンの設定、初期データベースの構築を行いました。
- ステップ3: アプリケーションという機能単位の概念を学び、Pythonクラスでデータベース構造を定義する「モデル」を作成しました。
- ステップ4: Djangoの強力な管理サイトを使い、プログラミングなしでデータを追加・編集できることを確認しました。
- ステップ5: MVTアーキテクチャの核心であるビュー、テンプレート、URLを結びつけ、動的なWebページを生成する仕組みを構築しました。
あなたは今、Djangoアプリケーションがどのように構成され、各要素がどのように連携して動作するのかという「地図」を手に入れた状態です。
次のステップ
ここから先、あなたのDjangoの旅はさらにエキサイティングなものになります。次に学ぶべきこととして、以下のようなテーマが挙げられます。
- フォームの作成: 現在は管理サイトからしか記事を投稿できません。Webページ上にフォームを作成し、一般ユーザーが記事を投稿・編集できる機能を追加してみましょう。(
django.forms
) - 静的ファイル(CSS/JavaScript)の管理: 見た目を整えるためにCSSを適用したり、動きを加えるためにJavaScriptを使ったりする方法を学びましょう。
- テンプレートの継承: 全ページ共通のヘッダーやフッターを
base.html
にまとめ、他のテンプレートで継承することで、コードの重複をなくしメンテナンス性を向上させます。 - ユーザー認証: ログイン、ログアウト、ユーザー登録といった機能を実装し、記事の投稿者をユーザーと紐付けましょう。
- クラスベースビュー(CBV): 今回は分かりやすさを重視して関数ベースビュー(FBV)を使いましたが、定型的な処理をより簡潔に書けるクラスベースビューも強力な選択肢です。
- テスト: 品質の高いアプリケーションを作るためには、テストコードを書くことが不可欠です。
- デプロイ: 作成したアプリケーションを、HerokuやAWSなどのクラウドサービスに公開(デプロイ)し、世界中の誰からでもアクセスできるようにしてみましょう。
これらの学習には、Django公式ドキュメントのチュートリアル が最も信頼できる情報源です。本チュートリアルで基礎を固めた今なら、公式ドキュメントの内容もスムーズに理解できるはずです。
Web開発の学習は、実際に手を動かし、試行錯誤を繰り返すことが一番の近道です。このチュートリアルで作成したブログアプリをベースに、自分だけの機能を追加・改造してみてください。
あなたの創造的なアイデアが、Djangoという強力なツールによって形になることを楽しみにしています。Happy Djangonaut