【python】djangoでAPIを作成したときのメモ

2022年2月9日

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

CreateAPIViewpost作成専用
ListAPIViewget読み取り専用モデルインスタンスのコレクション
RetrieveAPIViewget読み取り専用単一のモデルインスタンス
DestroyAPIViewdelete削除専用単一のモデルインスタンス
UpdateAPIViewput
patch
更新専用単一のモデルインスタンス
ListCreateAPIViewget
post
読み取り
書き込み
モデルインスタンスのコレクション
RetrieveUpdateAPIViewget
put
patch
読み取り
更新
単一のモデルインスタンス
RetrieveDestroyAPIViewget
delete
読み取り
削除
単一のモデルインスタンス
RetrieveUpdateDestroyAPIViewget
put
patch delete
読み取り
書き込み
削除
単一のモデルインスタンス

参考ページ

django REAT frameworkの管理画面を出さない

setting.py に下記を追加する

REST_FRAMEWORK = { 
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    ),
}

Django,python

Posted by Next-k