您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

为了更好的解释,这是使用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)),
]

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

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"),
]
Go 2022/1/1 18:38:05 有325人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶