DRF_ModelViewSetメソッドを使ってみる # 167日目
ゴールデンウィークですね。
昨日今日と旅行に出かけていましたが、渋滞がとんでもないことになっていて行きだけで5時間かかりました。。
さて、今日はDRFの続きです。
前回はこちらです↓
明日ちゃんとした技術書が届くので、今日は少し軽めなアウトプットです。
ModelViewSetとは
rest_framework.viewsetsに属するメソッドで、前回記事で書いたAPIView関連メソッドと同様、APIを作成するためのメソッドです。APIView関連のメソッドではCRUD(作成、読み込み、更新、削除)を機能別に作成できましたが、ModelViewSetではこれらの機能を一括で実装できます。
今回は、普段のDjangoと同様「views.py」でAPIを定義する形で実装しました。ただ、views.py経由でAPIを実装するには「ルーティング」という工程をurls.pyで定義しておく必要があります。
では順番に見ていきたいと思います。
まず使用するモデルは以下の前提になっています。
[models.py]
from django.db import models
class UserInfo(models.Model):
user_name = models.CharField(verbose_name='ユーザー名', max_length=32)
birth_day = models.DateField(verbose_name='生年月日')
age = models.PositiveSmallIntegerField(verbose_name='年齢', null=True, unique=False)
created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True)
次はシリアライザーを設定します。これはデータベースから取り出したモデルのオブジェクトをJSONにserializeしたり、ユーザーからPOST等で送られたJSONをdeserializeするためのクラスです。
[serializers.py]
from rest_framework import serializers
from .models import UserInfo
class UserInfoSerializer(serializers.ModelSerializer):
class Meta:
model = UserInfo
fields = ["id", "user_name", "birth_day", "age", "created_at"]
そしてビューを設定します。ここで本題のModelViewSetを活用します。
[views.py]
from rest_framework import viewsets
from .models import UserInfo
from .serializers import UserInfoSerializer
class UserInfoViewSet(viewsets.ModelViewSet):
queryset = UserInfo.objects.all()
serializer_class = UserInfoSerializer
最後にurls.pyでパスを設定します。本日のポイントでもあるルーティングもここで行います。
[urls.py]
from django.urls import path, include
from rest_framework import routers
from . import views
# DefaultRouterクラスのインスタンスを代入
defaultRouter = routers.DefaultRouter()
# userInfo/にUserInfoViewSetをルーティングする(userInfo/だと上手くいかない)
defaultRouter.register('userInfo', views.UserInfoViewSet)
urlpatterns = [
path('', include(defaultRouter.urls), name="userinfo"),
]
↓こんな感じの画面が表示されれば成功です。
これでデータの作成、読み込み、更新、削除ができるようになりました。
ここまでお読みいただきありがとうございました!