Möglicherweise relevant .
Was ist der Unterschied zwischen Ansichten und Ansichten ? Und was ist mit Router und URL-Mustern ?
ViewSets
und Routers
sind einfache Tools zur Beschleunigung der Implementierung Ihrer API, wenn Sie auf Standardverhalten und Standard-URLs abzielen.
Mit ViewSet
müssen Sie keine separaten Ansichten erstellen, um eine Liste von Objekten und Details eines Objekts abzurufen. ViewSet behandelt sowohl die Liste als auch die Details für Sie auf einheitliche Weise.
Wenn Sie Router
verwenden, wird Ihr ViewSet
mit "standardisiert" verbunden (dies ist in keiner Weise Standard, sondern nur eine Struktur, die von den Erstellern des Django REST - Frameworks implementiert wurde). Struktur von URLs. Auf diese Weise müssen Sie Ihre URL-Muster nicht manuell erstellen, und Sie können sicher sein, dass alle Ihre URLs konsistent sind (zumindest auf der Ebene, für die Router
verantwortlich ist).
Es sieht nach nicht viel aus, aber wenn Sie eine riesige API implementieren, in der Sie viele und viele URL-Muster und -Ansichten haben, wird die Verwendung von ViewSets
und Routers
einen großen Unterschied machen.
Zur besseren Erklärung: Dies ist Code, der ViewSets und Router verwendet:
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)),
]
Und gleichwertiges Ergebnis mit normalen Views und ohne Router:
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"),
]