gpt4 book ai didi

django-rest-framework - View 和 View 集之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 21:50:53 25 4
gpt4 key购买 nike

可能相关:What does django rest framework mean trade offs between view vs viewsets?

viewsviewsets 有什么区别?那么 routerurlpatterns 呢?

最佳答案

如果您的目标是标准行为和标准 URL,

ViewSetsRouters 是加速 API 实现的简单工具。

使用 ViewSet 您不必创建单独的 View 来获取对象列表和一个对象的详细信息。 ViewSet 将以一致的方式为您处理列表和详细信息。

使用 Router 会将您的 ViewSet 连接到“标准化”(它在任何全局范围内都不是标准的,只是由 Django REST 框架的创建者实现的一些结构)结构的网址。这样您就不必手动创建 urlpatterns 并且可以保证所有 URL 都是一致的(至少在 Router 负责的层上)。

看起来不多,但是在实现一些巨大的 API 时,您将拥有很多很多 urlpatterns 和 View ,使用 ViewSetsRouters 会有很大的不同。

为了更好的解释:这是使用 ViewSetsRouters 的代码:

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)),
]

使用普通 Views 和没有 routers 的等效结果:

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

关于django-rest-framework - View 和 View 集之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com