Django REST frameworkライブラリ、
ViewSet の基本 設定方法
について解説します。
viewsetを使うと、いちいち、ListView, RetrieveViewなどを作らなくて済みますので、是非一度お試し下さい!
各.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の使い方!
でした!
本日もありがとうございました!