背景
Chat GPT-3.5にDjango REST frameworkのAPIを作らせようとしたが、
少し勉強しないとChat GPTが作ったコードの評価できないため、
Django REST frameworkのチュートリアルなどを一通り読むことにした。
詳細な手順等は公式のチュートリアルを参照すればよいため、個人的に気になったことのみメモする。
学習内容
Djangoでプロジェクトやアプリを作成したら、
Django REST frameworkを使うには下記ファイルを編集or新規作成する。
-
アプリ名/models.py
下記のように適当なモデルを追加する。models.pyfrom django.db import models class ArticleTag(models.Model): """タグ一覧""" tag_name = models.CharField(max_length=50) created_date = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now=True) is_deleted = models.BooleanField(default=False) class Meta: """デフォルトのソート条件""" ordering = ['created_date']
-
アプリ名/serializers.py
モデルとJSONの変換できるように下記を記載する(シリアル化)。
本当はカラムごとに型を指定するコードの方がよさそうだが、
こちらの方が簡単に記載できる。serializers.pyfrom rest_framework import serializers from .models import ArticleTag class ArticleTagSerializer(serializers.ModelSerializer): class Meta: model = ArticleTag # これで全てのカラムを指定できる fields = '__all__'
-
アプリ名/views.py
下記はのように書けば概ね問題なし。DELETEなどを追加したいなら別途DELETE関数を追加する。
ListCreateAPIViewなどを使えばGET関数などを省略できるが、
簡略化されすぎてよくわからないため今回は採用しない。views.pyfrom rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from .models import ArticleTag from .serializers import ArticleTagSerializer class ArticleTagAPIView(APIView): def get(self, request): tags = ArticleTag.objects.all() serializer = ArticleTagSerializer(tags, many=True) return Response(serializer.data) def post(self, request): serializer = ArticleTagSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
プロジェクト名/setting.py
下記のように
INSTALLED_APPS
にrest_frameworkとアプリ名を追加する。setting.pyINSTALLED_APPS = [ ... 'rest_framework', 'アプリ名', ]
またページごとに返されるオブジェクト数を制限するために下記も追加しておく。
setting.pyREST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
-
プロジェクト名/urls.py
下記のように対応したパスを定義する。urls.pyfrom django.urls import path from ..アプリ名.views import ArticleTagListView urlpatterns = [ path('tags/', ArticleTagListView.as_view(), name='tag-list'), ]
所感
一つのAPIを作成するにも色々な書き方があるため理解しにくかったです。
実際の開発現場では管理が大変そうです。
本記事に間違いがあればご指摘ください。