見出し画像

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"),
]

↓こんな感じの画面が表示されれば成功です。

これでデータの作成、読み込み、更新、削除ができるようになりました。


ここまでお読みいただきありがとうございました!



参考


この記事が気に入ったらサポートをしてみませんか?