relevantとなる場合があります。Django RESTフレームワーク:ビューとビューセットの違い?
の違いは?とviewsetsの違いは何ですか?そして、ルーターについては、とurlpatterns?
relevantとなる場合があります。Django RESTフレームワーク:ビューとビューセットの違い?
の違いは?とviewsetsの違いは何ですか?そして、ルーターについては、とurlpatterns?
ViewSets
とRouters
は、標準的な動作と標準のURLを目指している場合は、APIの実装をスピードアップするための簡単なツールです。
ViewSet
を使用すると、オブジェクトのリストと1つのオブジェクトの詳細を取得するために別々のビューを作成する必要はありません。 ViewSetはリストとディテールの両方を一貫して処理します。
Router
を使用すると、ViewSet
を「標準化」(グローバルには標準ではなく、Django RESTフレームワークの作成者によって実装された一部の構造)のURL構造に接続します。そのようにすれば、手作業でURLパターンを作成する必要はなく、すべてのURLが一貫していることが保証されています(少なくともRouter
が責任を負います)。
多くのようには見えませんが、多くのURLパターンとビューを持つような巨大なAPIを実装する場合、ViewSets
とRouters
を使用すると大きな違いが生じます。より良い説明のために
:通常のビューを使用して
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
from rest_framework import viewsets
from yourapp.serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
urls.pyこれは、コードビューセットとルータを使用していますルータ:
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"),
]
申し訳ありませんが、私はそれを見ていません。 :(ルータ=ルータ.SimpleRouter(); router.register(r'accounts '、AccountViewSet) 'と' urlpatterns = [url(r'^accounts/'、AccountView)]の違いは何ですか?? –
最初に1つは2つのURLを登録します(リスト用と詳細用)。更新された回答を参照 – GwynBleidD
もっと明確になりました、ありがとうございました! –
あなたは[ビューセットのチュートリアル](http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/)を読みました?これは、ビュー+ URLパターンからビューセット+ルーターに移動することを説明しています。あなたが理解していない具体的なことはありますか? – Alasdair
こんにちは@Alasdair、はい、私はチュートリアルを読んで、それは非常によくどのようにビューセットとビューの違いは何かに多くの言葉を費やすように見えませんビューセットを使用して説明します。関連すると思われる唯一の段落は、「ViewSetクラスはViewクラスとほぼ同じですが、getやputなどのメソッドハンドラではなく、読み込みや更新などの操作を提供する点が異なります。しかし、このパラグラフでさえ特に明白ではないようです(例えば、読み込みと更新を好む理由は何ですか?)。 –
'get'と' put'に対する 'read'と' update'の利点は、あなたがそれらを呼び出すために使われたHTTPメソッドからapiメソッドを切り離したことです。その後、ルータを使用してビューセットをURLにフックすると、コードが節約され、APIの整合性が向上します。 – Alasdair