Django REST Framework: diferencia entre vistas y conjuntos de vistas?

Puede ser relevante .

¿Cuál es la diferencia entre vistas y conjuntos de vistas ? ¿Y qué pasa con enrutador y urlpatterns ?

ViewSets y los Routers son herramientas simples para acelerar la implementación de su API, si está apuntando al comportamiento estándar y las URL estándar.

Al usar ViewSet , no tiene que crear vistas separadas para obtener una lista de objetos y detalles de un objeto. ViewSet manejará por usted de manera consistente tanto la lista como los detalles.

El uso de Router conectará su ViewSet en una ViewSet “estandarizada” (no es estándar de ninguna manera global, solo una estructura que fue implementada por los creadores del marco de Django REST) ​​de las URL. De esa manera, no tiene que crear sus patrones de URL a mano y tiene la garantía de que todas sus direcciones URL son coherentes (al menos en la capa de la que es responsable el Router ).

Parece que no mucho, pero cuando implementes una gran API donde tengas muchos y muchos patrones y vistas de ViewSets , el uso de ViewSets y Routers hará una gran diferencia.

Para una mejor explicación: este es el código que usa ViewSets y 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)), ] 

Y resultado equivalente usando vistas normales y sin enrutadores:

vistas.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[0-9]+)/^', views.ArticleDetail.as_view(), name="article-detail"), ]