【DRF】views.pyで「APIview」と「modelViewSet」どっちを使う?違いがよく分からない。
2022/3/16
2022/4/3
DjangoでAPIを作る時などにviews.py内で「generics.◯◯APIView」や「viewsets.ModelViewSet」を使っていたのですが、あまり内容を理解していなかったので「結局どっちを使ったらいいのか」を中心に調べてみました。
またそれぞれの違いや使い方もメモとして残しておきます。
目次
結論:どちらを使っても問題なさそう
少し調べた結論としては、機能的には「どちらを使っても問題ない」という印象を受けました。APIviewもModelViewSetもあらゆる操作や認証制限などは一通りできるようです。
ただし、CRUDを作成する場合は「ModelViewSet」が手っ取り早いかもしれません。後述します。
調べる中でより詳しく違いが見つかり次第更新していきます。(詳しい方もしあれば教えてください…)
APIView と ModelViewSetの2つの違い
大きなわかりやすい違いはこの2つかなと感じました。
URLを自分で決められるかどうか
「ModelViewSet」は、あらかじめ操作ごとのエンドポイント(URI)が決められています。「APIView」はそれぞれ自分で定めることができて自由度が高いんですね。
CRUDを1つのクラスで作成できるかどうか
「ModelViewSet」はCRUDを作成する場合は1つのクラスで作成することができます。一方「APIView」はCRUDの全操作ができるビュークラスがないので、2つ以上のクラスを書く必要があるためコード量が少し増えてしまうという点があります。
「APIView」の種類・書き方
APIViewの種類 | できること |
---|---|
ListAPIView | 一覧取得(GET) |
RetrieveAPIView | 詳細取得(GET) |
CreateAPIView | 作成(CREATE) |
UpdateAPIView | 更新(PATCH) |
DestroyAPIView | 削除(DELETE) |
APIViewの種類 | できること |
---|---|
ListCreateAPIView | 一覧取得、作成 |
RetrieveUpdateAPIView | 詳細取得、更新 |
RetrieveDestroyAPIView | 詳細取得、削除 |
RetrieveUpdateDestroyAPIView | 詳細取得、更新、削除 |
書き方の例
from rest_framework import generics
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
from api.views import PostList
urlpatterns = [
path('post-list/', PostList.as_view(), name='post-list'),
...,
]
「ModelViewSet」の種類・書き方
ModelViewSetの種類 | できること |
---|---|
ModelViewSet | 一覧取得、詳細取得、作成、更新、削除 |
ReadOnlyModelViewSet | 一覧取得、詳細取得 |
書き方の例
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
from rest_framework import routers
from api.views import TaskViewSet
router = routers.DefaultRouter()
router.register('posts', PostViewSet, basename='posts')
urlpatterns = [
...,
]
最近の記事
音楽生成AI「Suno」の使い方まとめ!作詞作曲が簡単にできる?
簡単に曲が作れるAIということでよく聞く「Suno(Chirp)」についてまとめました。
目次「Suno」とはテキストからさまざまな音声を生成する「Bark」歌詞から曲を生成する「Chirp」...
2023/11/24
2023/11/24
【Open AI】APIの料金まとめ|GPT・DALL·E・Whisperなど
Open AIのAPI(一部)の料金をまとめました。
参考のために日本円は「1ドル150円」で換算をしています。
目次Text generation: テキスト生成Assistants ...
2023/11/22
2023/11/22
【Next.js】Assistants APIの基本的なコードまとめ。
Open AIの「Assistants API」をNext.jsで使用する時の基本的なコードをまとめました。
目次Open AIのAPIセットアップ基本の使い方Threads: スレッドを作る...
2023/11/21
2023/11/21
【Next.js】Open AIのAPIでファイルをアップロードする方法。
今回は、Next.jsサイトからOpen AIのAPI(Upload file)で、ファイルをアップロードする方法を実装するのに時間がかかったのでその過程と最終コードをまとめます。(Vercelにデ...
2023/11/21
2023/11/22
「生成系AIのWEBプロダクトTOP50」をまとめてみる。
Andreessen Horowitzが出している記事で紹介されている「AIプロダクトの月間訪問者数ランキングTOP50」のサービスをまとめました。
目次ChatGPTcharacter.ai...
2023/10/3
2023/10/3
【Next.js 13】NextAuth+FireStoreにユーザー情報を保存する。
今回は、以下の3つをNext.js 13で実装するためのメモです。
Googleアカウントでログインできる
アカウント、セッション情報をFirestoreに保存する
サーバーサイ...
2023/7/12
2023/7/12