wake-up-neo.com

Django REST Framework: Unterschied zwischen Views und Viewsets?

Möglicherweise relevant .

Was ist der Unterschied zwischen Ansichten und Ansichten ? Und was ist mit Router und URL-Mustern ?

35
Edgar Derby

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"),
]
72
GwynBleidD