栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django REST Framework:视图和视图集之间的区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django REST Framework:视图和视图集之间的区别?

ViewSets
并且
Routers
如果您要针对标准行为和标准网址,则它们是加快API实现的简单工具。

使用

ViewSet
您不必创建单独的视图即可获取对象列表和一个对象的详细信息。ViewSet将以一致的方式为您处理列表和详细信息。

使用

Router
会将您连接
ViewSet
到URL的“标准”结构(在任何全局方法上都不是标准的,只是Django
REST框架的创建者实现的某些结构)。这样,您就不必手动创建urlpattern,并且可以确保所有url都是一致的(至少在
Router
负责该层的层上)。

看起来并不多,但是当实现一些巨大的api时,您将拥有很多urlpattern和视图,使用

ViewSets
Routers
会产生很大的不同。

为了更好的解释,这是使用ViewSets和Routers的代码:

views.py:

from snippets.models import Articlefrom rest_framework import viewsetsfrom yourapp.serializers import ArticleSerializerclass ArticleViewSet(viewsets.ModelViewSet):    queryset = Article.objects.all()    serializer_class = ArticleSerializer

urls.py:

from django.conf.urls import url, includefrom yourapp import viewsfrom rest_framework.routers import DefaultRouterrouter = DefaultRouter()router.register(r'articles', views.ArticleViewSet)urlpatterns = [    url(r'^', include(router.urls)),]

使用普通视图且没有路由器的等效结果:

views.py

from snippets.models import Articlefrom snippets.serializers import ArticleSerializerfrom rest_framework import genericsclass ArticleList(generics.ListCreateAPIView):    queryset = Article.objects.all()    serializer_class = ArticleSerializerclass ArticleDetail(generics.RetrieveUpdateDestroyAPIView):    queryset = Article.objects.all()    serializer_class = ArticleSerializer

urls.py

from django.conf.urls import url, includefrom yourapp import viewsurlpatterns = [    url(r'articles/^', views.ArticleList.as_view(), name="article-list"),    url(r'articles/(?P<pk>[0-9]+)/^', views.ArticleDetail.as_view(), name="article-detail"),]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/626493.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号