関連 の場合があります。
viewsとviewsetsの違いは何ですか?そして、routerとurlpatternsはどうですか?
ViewSets
とRouters
は、標準の動作と標準のURLを目指している場合、APIの実装を高速化するためのシンプルなツールです。
ViewSet
を使用すると、オブジェクトのリストと1つのオブジェクトの詳細を取得するために個別のビューを作成する必要がありません。 ViewSetは、リストと詳細の両方で一貫した方法で処理します。
Router
を使用すると、ViewSet
が「標準化された」状態に接続されます(グローバルな方法では標準ではなく、Django RESTフレームワークの作成者によって実装された構造です) URLの構造。そうすれば、手動でurlpatternsを作成する必要がなく、すべてのurlが一貫していることが保証されます(少なくともRouter
が担当するレイヤー)。
それほど多くはないように見えますが、多数のurlpatternとビューを持つ巨大なAPIを実装する場合、ViewSets
とRouters
を使用すると大きな違いが生じます。
説明をわかりやすくするために、これはビューセットとルーターを使用したコードです。
views.py:
from snippets.models import Article
from rest_framework import viewsets
from yourapp.serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
urls.py:
from Django.conf.urls import url, include
from yourapp import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'articles', views.ArticleViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
]
通常のビューを使用し、ルーターを使用しない場合の同等の結果:
views.py
from snippets.models import Article
from snippets.serializers import ArticleSerializer
from rest_framework import generics
class ArticleList(generics.ListCreateAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
class ArticleDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
urls.py
from Django.conf.urls import url, include
from yourapp import views
urlpatterns = [
url(r'articles/^', views.ArticleList.as_view(), name="article-list"),
url(r'articles/(?P<pk>[0-9]+)/^', views.ArticleDetail.as_view(), name="article-detail"),
]