视图和视图集之间的区别是什么? [英] Difference between views and viewsets?

查看:15
本文介绍了视图和视图集之间的区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

viewsviewsets有什么区别?routerurlpatterns怎么办?

推荐答案

ViewSetsRouters如果您的目标是标准行为和标准URL,那么它们是可以加速您的接口实现的简单工具。

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

使用Router会将ViewSet连接到&Standard";URL结构(这不是任何全球标准,只是由Django睡觉框架的创建者实现的一些结构)。这样您就不必手动创建urlpatterns,并且可以保证您的所有URL都是一致的(至少在Router负责的层上是一致的)。

看起来不是很多,但是在实现一些巨大的API时,如果您有很多urlpatterns和视图,使用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)),
]

和使用NORMALViews和NOrouters得到的等价结果:

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

这篇关于视图和视图集之间的区别是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆