目的
- とにかくやりきることが一番の目的
- 毎日発信することで、発信する習慣作り
- 個人開発をやりきることで、実績作り
開発するもの
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をもってないといけない。
これからそういうのを増やしていこう。