python - start - Django REST Framework: diferencia entre vistas y conjuntos de vistas?
rest framework django 2 (1)
ViewSets
y los Routers
son herramientas simples para acelerar la implementación de su API, si está apuntando a un comportamiento estándar y 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 en la lista como en los detalles.
El uso de Router
conectará su ViewSet
a una ViewSet
"estandarizada" (no es estándar de ninguna manera global, solo una estructura que implementaron 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<pk>[0-9]+)/^'', views.ArticleDetail.as_view(), name="article-detail"),
]
Puede ser relevant .
¿Cuál es la diferencia entre vistas y conjuntos de vistas ? ¿Y qué pasa con enrutador y urlpatterns ?