【Django REST framework】Viewsetの基本や使い方を解説

※本サイトにはプロモーション・広告が含まれています。

Django REST frameworkライブラリ、

ViewSet の基本 設定方法

について解説します。

viewsetを使うと、いちいち、ListView, RetrieveViewなどを作らなくて済みますので、是非一度お試し下さい!

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

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

icon
icon

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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をコピーしました