Может быть relevant.Django REST Framework: разница между видами и видами?
В чем разница между видами и Просмотры? А как насчет маршрутизатор и urlpatterns?
Может быть relevant.Django REST Framework: разница между видами и видами?
В чем разница между видами и Просмотры? А как насчет маршрутизатор и urlpatterns?
ViewSets
и Routers
- это простые инструменты для ускорения реализации вашего API, если вы нацелены на стандартное поведение и стандартные URL-адреса.
Используя ViewSet
, вам не нужно создавать отдельные представления для получения списка объектов и деталей одного объекта. ViewSet будет обрабатывать для вас согласованным образом как список, так и детали.
Использование Router
приведет к подключению вашего ViewSet
к «стандартизованному» (он не является стандартным ни в каком глобальном виде, только в некоторой структуре, реализованной создателями структуры Django REST). Таким образом, вам не нужно создавать свои URL-адреса вручную, и вам гарантировано, что все ваши URL-адреса являются согласованными (по крайней мере, на уровне, за который отвечает Router
).
Это не так много, но при реализации огромного api, где у вас будет много и много URL-адресов и просмотров, использование ViewSets
и Routers
будет иметь большое значение.
Для лучшего объяснения: это код, используя ViewSets и маршрутизаторы:
views.py:
from snippets.models import
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)),
]
и эквивалентный результат с помощью обычных представлений и нет маршрутизаторы:
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"),
]
Извините, но я продолжаю его не видеть. :(В чем разница между: 'router = routers.SimpleRouter(), router.register (r'accounts ', AccountViewSet)' и 'urlpatterns = [url (r'^accounts/', AccountView),]'? –
Сначала вы зарегистрируете 2 URL-адреса, один для списка и один для подробностей, см. Обновленный ответ – GwynBleidD
Гораздо понятнее, спасибо! :) –
Вы читали [учебник о viewsets] (http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/) ? Он описывает перемещение из представлений + urlpatterns в viewets + routers. Есть ли что-то конкретное, что вы не понимаете? – Alasdair
Привет @Alasdair, да, я прочитал учебник, и, хотя он очень хорошо объясняет, как работать с представлениями, кажется, он не тратит много слов на то, каковы различия между представлениями и представлениями. Единственный абзац, который кажется уместным, - это классы «ViewSet» - это почти то же самое, что и классы View, за исключением того, что они предоставляют такие операции, как чтение или обновление, а не обработчики методов, такие как get или put ». Но даже этот абзац не кажется явным (например, почему вы предпочитаете читать и обновлять, чтобы их можно было или положить?). –
Преимущество 'read' и' update' над 'get' и' put' заключается в том, что вы отключили методы api из методов HTTP, используемых для их вызова. Затем вы можете использовать маршрутизаторы, чтобы подключить viewet к URL-адресам, что экономит код и может сделать ваш API более последовательным. – Alasdair