以下は、Djangoを使用してブログアプリを作成する手順です。このアプリでは、投稿の作成・編集・削除を行える基本機能を実装します。その後、ユーザー認証とコメント機能を追加する方法を説明します。
1. Django プロジェクトのセットアップ
まず、Django プロジェクトとアプリケーションを作成します。
必要な環境を準備
# 必要なら仮想環境を作成
python -m venv myenv
source myenv/bin/activate # Windowsでは `myenv\Scripts\activate`
# Django をインストール
pip install django
プロジェクトを作成
django-admin startproject blog_project
cd blog_project
python manage.py startapp blog
settings.py
にアプリを登録します:
# blog_project/settings.py
INSTALLED_APPS = [
...
'blog',
]
2. モデルの定義
ブログ投稿のモデルを定義します。
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100) # 投稿タイトル
content = models.TextField() # 投稿内容
created_at = models.DateTimeField(auto_now_add=True) # 作成日時
updated_at = models.DateTimeField(auto_now=True) # 更新日時
def __str__(self):
return self.title
データベースをマイグレーション
python manage.py makemigrations
python manage.py migrate
3. 管理画面のセットアップ
Django の管理画面から投稿を操作可能にします。
# blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
管理ユーザーを作成:
python manage.py createsuperuser
サーバーを起動して、管理画面にアクセス:
python manage.py runserver
# ブラウザで http://127.0.0.1:8000/admin/
4. ビューと URL の作成
CRUD 操作を実装するためのビューと URL を作成します。
URL の設定
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
path('post/new/', views.post_create, name='post_create'),
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
path('post/<int:pk>/delete/', views.post_delete, name='post_delete'),
]
プロジェクトの urls.py
にも追加:
# blog_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
ビューの作成
# blog/views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Post
from .forms import PostForm
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
def post_create(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
form.save()
return redirect('post_list')
else:
form = PostForm()
return render(request, 'blog/post_form.html', {'form': form})
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
form.save()
return redirect('post_list')
else:
form = PostForm(instance=post)
return render(request, 'blog/post_form.html', {'form': form})
def post_delete(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
post.delete()
return redirect('post_list')
return render(request, 'blog/post_confirm_delete.html', {'post': post})
5. フォームの作成
Djangoのフォームを作成します。
# blog/forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
6. テンプレートの作成
templates/blog/
フォルダを作成し、以下のテンプレートを配置します。
post_list.html
<h1>ブログ一覧</h1>
<a href="{% url 'post_create' %}">新しい投稿を作成</a>
<ul>
{% for post in posts %}
<li>
<a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
post_detail.html
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<a href="{% url 'post_edit' post.pk %}">編集</a>
<form action="{% url 'post_delete' post.pk %}" method="post">
{% csrf_token %}
<button type="submit">削除</button>
</form>
<a href="{% url 'post_list' %}">戻る</a>
post_form.html
<h1>投稿フォーム</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">保存</button>
</form>
<a href="{% url 'post_list' %}">戻る</a>
これで基本的なブログアプリが完成です!