目次

    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操作が実装されたアプリケーションが完成しました。

    PREV
    2025.05.06
    LPにおけるGTMとGA4の効果的な活用術
    NEXT
    2025.05.09
    商品の魅力100%以上のサイト