【Django】restframework rest_framework viewsets ViewSet の基本

frame-imgDjango

Django REST frameworkライブラリ、

ViewSet の基本 設定方法

について解説します

viewsetを使うと、いちいち、

ListView, RetrieveView….等々

作らなくて済みますので、是非一度お試し下さい!

viewsetsについての公式ドキュメント

各.pyファイルごとに例を載せてますので、コピペなどでうまく活用いただければ幸いです

serializers.py

from rest_framework import serializers
from leads.models import Lead

class LeadSerializer(serializers.ModelSerializer):
    owner = serializers.SerializerMethodField(read_only=True)
    class Meta:
        model = Lead
        fields = "__all__"

こちらは、viewsetsを使う場合に限らず必要ですね!

views.py

from rest_framework import viewsets
from rest_framework.permissions import AllowAny

from leads.models import Lead
from leads.api.serializers import LeadSerializer

class LeadApiViewSet(viewsets.ModelViewSet):
    queryset = Lead.objects.all()
    serializer_class=LeadSerializer
    permission_classes = [AllowAny]

permissionsについては別記事でご紹介したいと思いますが、こちらでは誰でもアクセス可能な「AllowAny」で設定しています

urls.py

from leads.api.views import LeadApiViewSet

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'leads', LeadApiViewSet, basename='leads')
urlpatterns = router.urls

一般的なurls.pyと随分違いますね!

せっかくなので詳しく見てみましょう

補足:urlpatternsの中身

print(urlpatterns)
[
<URLPattern '^leads/$' [name='leads-list']>, 
<URLPattern '^leads\.(?P<format>[a-z0-9]+)/?$' [name='leads-list']>, 
<URLPattern '^leads/(?P<pk>[^/.]+)/$' [name='leads-detail']>, 
<URLPattern '^leads/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='leads-detail']>, 
<URLPattern '^$' [name='api-root']>, 
<URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>
]

leads-list, leads-detailなど自動的に作られているのがわかります

これのおかげで、

/leads/1/

などとpkを入れることでRetrieveViewにアクセスできるようになっています

以上、viewsetsの使い方!

でした!

本日もありがとうございました!

タイトルとURLをコピーしました