目次
1. Djangoプロジェクトの準備
まずは、Djangoプロジェクトを作成し、必要なパッケージをインストールします。
1.1 必要なソフトウェアのインストール
以下のコマンドで、DjangoとMySQLの依存関係をインストールします。
pip install django mysqlclient
1.2 Djangoプロジェクトの作成
新しいDjangoプロジェクトを作成します。
django-admin startproject crudproject
cd crudproject
python manage.py startapp blog
2. モデルの作成
blog
アプリケーションのモデルを定義します。今回はブログ記事を管理するモデルを作成します。
2.1 models.py
の作成
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=200) # タイトル
slug = models.SlugField(unique=True) # スラッグ(URLに使う)
intro = models.TextField() # イントロ(説明文)
contents = models.TextField() # 本文
meta_keywords = models.CharField(max_length=255) # メタキーワード
meta_description = models.TextField() # メタディスクリプション
def __str__(self):
return self.title
3. データベースの設定
MySQLデータベースを設定し、Djangoの設定ファイルで接続情報を更新します。
3.1 settings.py
の設定
settings.py
でデータベース接続情報を更新します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
3.2 データベースの作成
MySQLでデータベースとユーザーを作成します。
CREATE DATABASE django_db;
CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON django_db.* TO 'django_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4. CRUD操作を実現するためのビューの作成
次に、ブログのCRUD操作を実現するビューを作成します。
4.1 views.py
の作成
from django.shortcuts import render, redirect, get_object_or_404
from .models import Blog
from .forms import BlogForm
# ブログ一覧表示
def blog_list(request):
blogs = Blog.objects.all() # すべてのブログ投稿を取得
return render(request, 'blog/blog_list.html', {'blogs': blogs})
# 新規ブログ投稿
def blog_create(request):
if request.method == 'POST':
form = BlogForm(request.POST)
if form.is_valid():
form.save() # 新しいブログを保存
return redirect('blog_list') # 一覧ページにリダイレクト
else:
form = BlogForm()
return render(request, 'blog/blog_form.html', {'form': form})
# ブログ投稿の更新
def blog_update(request, pk):
blog = get_object_or_404(Blog, pk=pk)
form = BlogForm(request.POST or None, instance=blog)
if form.is_valid():
form.save() # 編集した内容を保存
return redirect('blog_list') # 一覧ページにリダイレクト
return render(request, 'blog/blog_form.html', {'form': form})
# ブログ投稿の削除
def blog_delete(request, pk):
blog = get_object_or_404(Blog, pk=pk)
if request.method == 'POST':
blog.delete() # 削除
return redirect('blog_list') # 一覧ページにリダイレクト
return render(request, 'blog/blog_confirm_delete.html', {'blog': blog})
5. URLの設定
urls.py
で各ビューに対応するURLパターンを設定します。
5.1 urls.py
の作成
from django.urls import path
from . import views
urlpatterns = [
path('', views.blog_list, name='blog_list'), # ブログ一覧
path('create/', views.blog_create, name='blog_create'), # 新規作成
path('update/<int:pk>/', views.blog_update, name='blog_update'), # 更新
path('delete/<int:pk>/', views.blog_delete, name='blog_delete'), # 削除
]
6. テンプレートの作成
各ビューに対応するテンプレートを作成します。
6.1 blog_list.html
(ブログ一覧ページ)
<h1>ブログ一覧</h1>
<a href="{% url 'blog_create' %}">新しいブログ投稿</a>
<ul>
{% for blog in blogs %}
<li>
<strong>{{ blog.title }}</strong><br>
{{ blog.intro }}<br>
<a href="{% url 'blog_update' blog.id %}">編集</a> |
<a href="{% url 'blog_delete' blog.id %}">削除</a>
</li>
{% endfor %}
</ul>
6.2 blog_form.html
(ブログ作成・更新フォーム)
<h2>{{ form.instance.pk|yesno:"編集,新規作成" }}</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">保存</button>
</form>
<a href="{% url 'blog_list' %}">一覧に戻る</a>
6.3 blog_confirm_delete.html
(削除確認ページ)
<h2>「{{ blog.title }}」を削除しますか?</h2>
<form method="post">
{% csrf_token %}
<button type="submit">削除する</button>
</form>
<a href="{% url 'blog_list' %}">キャンセル</a>
7. 権限とセキュリティの設定
Djangoプロジェクトのディレクトリ権限を適切に設定します。
sudo chown -R www-data:www-data /var/www/your_project
sudo chmod -R 775 /var/www/your_project/storage
sudo chmod -R 775 /var/www/your_project/bootstrap/cache
8. 動作確認
ブラウザで http://yourdomain.com
にアクセスし、ブログのCRUD操作が正常に動作するか確認します。
まとめ
このガイドでは、DjangoプロジェクトでのCRUD操作を実現する方法を解説しました。MySQLデータベースとの接続設定から、モデル、ビュー、URL、テンプレートまでの一連の流れを説明しました。これで、Djangoを使ってCRUD操作が実装されたアプリケーションが完成しました。