0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人開発記録 2024/04/23

Posted at

目的

  • とにかくやりきることが一番の目的
  • 毎日発信することで、発信する習慣作り
  • 個人開発をやりきることで、実績作り

開発するもの

X(旧Twitter)のパクリ

構成

python
django REST framework
postgreSQL

本編

ローカルのpostgresqlのDBを作成

postgresqlを以下手順に従ってインストール

もろもろインストールが終わった後、pgAdminでlikeXというDBを作成

djangoからローカルのpostgresqlのDBに接続

psycopg2-binaryをインストール

pip install psycopg2-binary

DBの設定を変更

likex/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'likeX',
        'USER': 'postgres',
        'PASSWORD': 'admin',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

以下でDBと接続を確認

python manage.py dbshell
psql (16.2)
"help"でヘルプを表示します。

likeX=# 
likeX/tweet/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    bio = models.CharField(max_length=280, blank=True)
    location = models.CharField(max_length=100, blank=True)
    birth_date = models.DateField(null=True, blank=True)
    # groups と user_permissions の related_name を変更する
    groups = models.ManyToManyField(
        'auth.Group',
        verbose_name='groups',
        blank=True,
        help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
        related_name='tweet_user_set',  # ここを変更
        related_query_name='user',
    )
    user_permissions = models.ManyToManyField(
        'auth.Permission',
        verbose_name='user permissions',
        blank=True,
        help_text='Specific permissions for this user.',
        related_name='tweet_user_set',  # ここを変更
        related_query_name='user_permission',
    )


class Tweet(models.Model):
    content = models.CharField(max_length=280)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    likes = models.IntegerField(default=0)


class Relationship(models.Model):
    follower = models.ForeignKey(User, related_name='followers', on_delete=models.CASCADE)  # 誰がフォローしているか
    following = models.ForeignKey(User, related_name='following', on_delete=models.CASCADE)  # 誰をフォローしているか
    created_at = models.DateTimeField(auto_now_add=True)

ディレクトリの構成が悪いのか、apps.pyを修正

likeX/tweet/apps.py
from django.apps import AppConfig


class TweetConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    # name = 'tweet' を以下に変更 
    name = 'likeX.tweet' 

appを追加

likex/settings.py
INSTALLED_APPS = [
    ...
    'likeX.tweet', # 追加
]

マイグレーションを実行

python manage.py makemigrations tweet
python manage.py migrate

pgAdminでlikeXDBにマイグレーションしたテーブルが作成されていることを確認する

感想

一番最初の環境構築はとにかく面倒。。
あたりまえだけど成果を早くだしたいなら、慣れたツールやフレームワーク、DBをもってないといけない。
これからそういうのを増やしていこう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?