【python】djangoでAPIを作成したときのメモ
djangoでAPIを作ったときのメモです
目次
仕様
- django 3.2.11
- django-rest-framework 3.13.1
- django-rest-framework-jwt 1.11.0
- mysql
データベース削除、作成
mysql --user=root --password=root
DROP DATABASE "tableName"
CREATE DATABASE "tableName"
exit;
django プロジェクト作成
django-admin startproject "projectName"
django app作成
python manage.py startapp "appName"
djangoマイグレーション
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
スーパーユーザー登録
python manage.py createsuperuser
Models作成時に使ったコード
IDをuuidに変更する方法
class User(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
リレーション設定
1対N
team = models.ForeignKey(Team, null=True, on_delete=models.SET_NULL, related_name='player')
N対N
position = models.ManyToManyField(Position, related_name='player')
1対1
authUser = models.OneToOneField(settings.AUTH_USER_MODEL,related_name="profile" ,on_delete=models.CASCADE)
views.pyで使ったコード(N+1問題対策)
# N対1 1対1
# .select_related('authUser')
queryset = Profile.objects.all().order_by('first_name').select_related('authUser')
# N対N 1対N
# .prefetch_related('tag')
queryset = Profile.objects.all().order_by('first_name').prefetch_related('authUser')
django REST frameforkのViewClass
CreateAPIView | post | 作成専用 | |
ListAPIView | get | 読み取り専用 | モデルインスタンスのコレクション |
RetrieveAPIView | get | 読み取り専用 | 単一のモデルインスタンス |
DestroyAPIView | delete | 削除専用 | 単一のモデルインスタンス |
UpdateAPIView | put patch | 更新専用 | 単一のモデルインスタンス |
ListCreateAPIView | get post | 読み取り 書き込み | モデルインスタンスのコレクション |
RetrieveUpdateAPIView | get put patch | 読み取り 更新 | 単一のモデルインスタンス |
RetrieveDestroyAPIView | get delete | 読み取り 削除 | 単一のモデルインスタンス |
RetrieveUpdateDestroyAPIView | get put patch delete | 読み取り 書き込み 削除 | 単一のモデルインスタンス |
django REAT frameworkの管理画面を出さない
setting.py に下記を追加する
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
}
ディスカッション
コメント一覧
まだ、コメントがありません