Django入門:Webアプリケーションをゼロから構築
Djangoは、Pythonで書かれた高水準のWebフレームワークであり、迅速でクリーンな設計を促進します。Web開発における多くの一般的な課題を処理するための機能が組み込まれており、開発者はアプリケーションのロジックに集中できます。このチュートリアルでは、Djangoの基本的な概念を理解し、簡単なWebアプリケーションをゼロから構築するプロセスを解説します。
1. Djangoのインストールとプロジェクトのセットアップ
まず、Djangoをインストールする必要があります。Pythonのパッケージマネージャーであるpipを使用します。
1.1. pipによるDjangoのインストール
ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行します。
pip install Django
これにより、最新バージョンのDjangoがインストールされます。
1.2. 新しいDjangoプロジェクトの作成
プロジェクトを作成したいディレクトリに移動し、以下のコマンドを実行します。
django-admin startproject myproject
これにより、`myproject`という名前のディレクトリが作成され、その中にDjangoプロジェクトの基本構造が生成されます。
1.3. 開発サーバーの起動
プロジェクトディレクトリに移動し、以下のコマンドを実行して開発サーバーを起動します。
cd myproject python manage.py runserver
ブラウザでhttp://127.0.0.1:8000/にアクセスすると、「The install worked successfully! Congratulations!」というメッセージが表示されるはずです。
2. アプリケーションの作成とモデルの定義
Djangoプロジェクトは、複数の「アプリケーション」から構成されます。各アプリケーションは、特定の機能(例:ブログ、ユーザー管理)を担当します。
2.1. 新しいアプリケーションの作成
プロジェクトディレクトリ内で、以下のコマンドを実行して新しいアプリケーションを作成します。
python manage.py startapp myapp
作成された`myapp`ディレクトリは、アプリケーションのコードを格納します。
2.2. プロジェクトへのアプリケーションの登録
作成したアプリケーションをプロジェクトで使用できるように、myproject/settings.pyファイルを開き、INSTALLED_APPSリストにアプリケーション名を追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # ここに追加
]
2.3. モデルの定義
アプリケーションのデータベース構造を定義するために、myapp/models.pyファイルにモデルクラスを作成します。ここでは、簡単な「記事」モデルを作成します。
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
ここで、CharFieldは短いテキスト、TextFieldは長いテキスト、DateTimeFieldは日付と時刻を格納します。__str__メソッドは、オブジェクトを文字列として表示する際に使用されます。
2.4. データベースマイグレーション
モデルの変更をデータベースに反映させるために、マイグレーションを実行します。
python manage.py makemigrations python manage.py migrate
これにより、データベースに`Article`テーブルが作成されます。
3. ビューとURLの設定
ビューは、リクエストを受け取り、処理し、レスポンスを返すロジックを担当します。URLは、特定のリクエストをどのビューにルーティングするかを定義します。
3.1. ビューの作成
myapp/views.pyファイルに、記事一覧を表示するビューを作成します。
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'myapp/article_list.html', {'articles': articles})
このビューは、`Article`モデルのすべてのオブジェクトを取得し、それらを`article_list.html`テンプレートに渡してレンダリングします。
3.2. URLパターンの設定
myappディレクトリ内にurls.pyファイルを作成し、以下の内容を記述します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.article_list, name='article_list'),
]
次に、プロジェクトのルートURL設定ファイル(myproject/urls.py)で、このアプリケーションのURLをインクルードします。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('articles/', include('myapp.urls')), # ここに追加
]
これにより、/articles/にアクセスすると、myapp.views.article_listビューが実行されます。
4. テンプレートの作成
テンプレートは、HTMLファイルで、動的なデータを表示するために使用されます。
4.1. テンプレートディレクトリの作成
myappディレクトリ内にtemplatesディレクトリを作成します。さらにその中にmyappディレクトリを作成し、myapp/templates/myapp/という構造にします。
4.2. `article_list.html`の作成
myapp/templates/myapp/article_list.htmlファイルに、記事一覧を表示するためのHTMLを記述します。
<!DOCTYPE html>
<html>
<head>
<title>記事一覧</title>
</head>
<body>
<h1>記事一覧</h1>
<ul>
{% for article in articles %}
<li>
<h3>{{ article.title }}</h3>
<p>{{ article.content }}</p>
<small>投稿日: {{ article.published_date }}</small>
</li>
{% endfor %}
</ul>
</body>
</html>
Djangoのテンプレート言語({{ variable }}や{% tag %})を使用して、ビューから渡されたデータを表示します。
5. Django管理サイトの活用
Djangoには、データベースの内容を管理するための強力な管理サイトが組み込まれています。
5.1. 管理サイトへのモデルの登録
myapp/admin.pyファイルを開き、管理サイトで`Article`モデルを表示できるように登録します。
from django.contrib import admin from .models import Article admin.site.register(Article)
5.2. スーパーユーザーの作成
管理サイトにログインするために、スーパーユーザーを作成します。
python manage.py createsuperuser
指示に従って、ユーザー名、メールアドレス、パスワードを設定します。
5.3. 管理サイトへのアクセス
開発サーバーを起動し(python manage.py runserver)、ブラウザでhttp://127.0.0.1:8000/admin/にアクセスします。作成したスーパーユーザーでログインすると、記事の追加、編集、削除ができるようになります。
まとめ
このチュートリアルでは、Djangoの基本的なセットアップから、アプリケーションの作成、モデルの定義、ビューとテンプレート、URL設定、そして管理サイトの活用までを概観しました。DjangoはMVC(Model-View-Controller)に似たMTV(Model-Template-View)アーキテクチャを採用しており、それぞれの要素が明確に分離されているため、保守性の高いWebアプリケーションを効率的に開発できます。
ここからさらに、フォーム処理、ユーザー認証、データベースの関連付け、静的ファイルの管理など、より高度な機能へと学習を進めることができます。Djangoの豊富なドキュメントと活発なコミュニティは、学習プロセスを大いに助けてくれるでしょう。
