1. HOME
  2. ブログ
  3. エンジニアリング
  4. 【Django】SNSのDB設計・モデル定義をしてみよう!

BLOG

ブログ

エンジニアリング

【Django】SNSのDB設計・モデル定義をしてみよう!

SNSアプリケーションを構築するために、まずはデータベースの設計とモデルの定義を行います。この作業は、アプリのデータ構造を決定する重要なステップです。

チュートリアルの全体像

第1章: Djangoの開発環境を構築しよう

第2章: カスタムユーザー作成と認証導入

第3章: ユーザー登録機能を実装

第4章: Tailwindを使って綺麗なページを作る

第5章: SNSのDB設計・モデル定義をしよう(now🐾)

第6章: 画像アップロードの実装方法を解説

第7章: SNSアプリの投稿機能を実装しよう

アプリ作成

まず、Djangoプロジェクト内で新しいアプリケーションを作成します。以下のコマンドを実行してください。

python manage.py startapp sns

このコマンドにより、snsという名前のアプリケーションが作成されます。このアプリには、SNSに必要な機能を実装していきます。

テーブル設計

次に、データベースで使用するテーブルの設計を行います。以下のように、各テーブルに必要なカラムを定義します。

Post テーブル

  • user: 投稿をしたユーザー(外部キー)
  • image: 投稿に関連付けられた画像
  • caption: 投稿のキャプション(説明文)
  • created_at: 投稿が作成された日時
  • updated_at: 投稿が更新された日時

Comment テーブル

  • user: コメントをしたユーザー(外部キー)
  • post: コメントが関連する投稿(外部キー)
  • text: コメントの内容
  • created_at: コメントが作成された日時
  • updated_at: コメントが更新された日時

User テーブル

icon: ユーザーのアイコン画像

モデル定義

次に、上記のテーブル設計に基づいてDjangoのモデルを定義します。モデルは、データベースのテーブルをPythonのクラスとして表現したものです。

Post

sns/models.py

from django.contrib.auth import get_user_model
from django.db import models

User = get_user_model()


class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(upload_to="images", null=True, blank=True)
    caption = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

user: ForeignKeyを使ってUserモデルを参照します。

on_delete=models.CASCADEは、関連するユーザーが削除された場合にそのユーザーが作成した投稿も一緒に削除されることを意味します。

image: 投稿に関連する画像を保存するフィールドです。

caption: 投稿の説明文を格納するフィールドです。

created_atおよびupdated_at: それぞれ投稿が作成された日時と更新された日時を自動的に管理します。

Comment

同様に、コメントのモデルも定義します。

sns/models.py

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    text = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

userpostはそれぞれ、誰がどの投稿にコメントしたかを示します。text: コメントの内容を格納します。

User

accounts/models.py

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(unique=True, max_length=255)
    email = models.EmailField(unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    icon = models.ImageField(upload_to="icons", null=True, blank=True)
    description = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    objects = UserManager()

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["username"]

ユーザーの基本情報や、アイコン、自己紹介文などを格納します。

Pillowインストール

画像を扱うために、Pillowというライブラリをインストールします。これにより、画像のアップロードや処理が可能になります。以下のように、requirements.txtに追加します。

docker/python/requirements.txt

Django==5.1
mysqlclient
django-tailwind[reload]
Pillow

次に、以下のコマンドを実行して、Dockerコンテナを再ビルドします。

docker compose up -d --build

マイグレーションファイル作成

モデルを定義したら、Djangoにデータベースの変更を認識させるために、マイグレーションファイルを作成します。

python manage.py makemigrations

このコマンドを実行すると、モデルの変更に基づいてマイグレーションファイルが自動生成されます。

マイグレーション実行

最後に、データベースに変更を適用します。以下のコマンドを実行します。

python manage.py migrate

このコマンドによって、データベースが最新の状態に更新され、SNSアプリで使用するためのテーブルが作成されます。

まとめ

以上の手順を通じて、Djangoを使用してSNSアプリのデータベース設計とモデル定義が完了しました。これで、アプリの機能を実装するための基盤が整いました。

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

関連記事