视图和视图集之间的区别是什么? [英] Difference between views and viewsets?
本文介绍了视图和视图集之间的区别是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能相关:What does django rest framework mean trade offs between view vs viewsets?
views
和viewsets
有什么区别?router
和urlpatterns
怎么办?
推荐答案
ViewSets
和Routers
如果您的目标是标准行为和标准URL,那么它们是可以加速您的接口实现的简单工具。
ViewSet
,您不必创建单独的视图来获取对象列表和一个对象的详细信息。ViewSet
将以一致的方式为您处理列表和详细信息。
使用Router
会将ViewSet
连接到&Standard";URL结构(这不是任何全球标准,只是由Django睡觉框架的创建者实现的一些结构)。这样您就不必手动创建urlpatterns
,并且可以保证您的所有URL都是一致的(至少在Router
负责的层上是一致的)。
看起来不是很多,但是在实现一些巨大的API时,如果您有很多urlpatterns
和视图,使用ViewSets
和Routers
会有很大的不同。
更好的解释:这是使用ViewSets
和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)),
]
和使用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屋!
查看全文