web-dev-qa-db-fra.com

Django REST Framework: différence entre les vues et les ensembles de vues?

Peut être pertinent .

Quelle est la différence entre les vues et les vues ? Et qu'en est-il du routeur et urlpatterns ?

35
Edgar Derby

ViewSets et Routers sont des outils simples pour accélérer la mise en œuvre de votre API, si vous visez un comportement standard et des URL standard.

Avec ViewSet, vous n'avez pas besoin de créer des vues distinctes pour obtenir la liste des objets et les détails d'un objet. ViewSet traitera pour vous de manière cohérente à la fois la liste et les détails.

L'utilisation de Router connectera votre ViewSet à "standardisé" (ce n'est pas standard d'une manière globale, juste une structure qui a été implémentée par les créateurs du framework Django REST) structure des URL. De cette façon, vous n'avez pas à créer vos modèles d'url à la main et vous êtes assuré que toutes vos URL sont cohérentes (au moins sur la couche dont Router est responsable).

Cela ne ressemble pas à grand-chose, mais lors de l'implémentation d'une énorme API où vous aurez de nombreux et nombreux modèles d'URL et vues, l'utilisation de ViewSets et Routers fera une grande différence.

Pour une meilleure explication: il s'agit de code utilisant ViewSets et 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)),
]

Et résultat équivalent en utilisant des vues normales et sans routeurs:

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