Django 中的 APIView 和 ViewSets 类有什么区别?

问题描述 投票:0回答:4

APIViewViewSets 类之间有什么区别?

我正在关注 Django REST 框架 官方文档。我发现它缺乏示例。

你能用一个合适的例子解释一下上面的区别吗?

django django-views django-rest-framework
4个回答
60
投票

APIView
是您在定义 REST 视图时通常会覆盖的最基本的类。您通常定义 get、put、delete 等方法,其他方法请参见:http://www.cdrf.co/3.5/rest_framework.views/APIView.html。使用
APIView
您可以定义您的 view 并将其添加到您的网址中,如下所示:

# in views.py
class MyAPIView(APIView):
     ... #here you put your logic check methods you can use

# in urls.py
url(r'^posts$', MyAPIView.as_view()), #List of all the posts

因为 DRF 提供了一些常见的功能,例如获取

/post/4
、删除
/post/4
、获取所有帖子、更新帖子和创建新帖子
ViewSet

在使用

ViewSet
之前,让我先介绍一下泛型类。它们做得很好,但是您需要提供完整的 API 端点,就像我在
MyAPIView
视图中所做的那样(再次查看更多信息,请检查 http://www.cdrf.co/http://www. django-rest-framework.org/)。所以你必须定义你自己的 url 路径。

但是使用

ViewSet
,您可以创建 ViewSet,它实际上合并了所有上述操作,而且您也不需要定义 url 路径,而是使用为您创建路径的路由器,如下所示:

 # views.py
 class PostViewSet(ViewSet):  # here you subclass ViewSet check methods you can override, you have also ModelViewSet,...


 # urls.py 
 router = routers.DefaultRouter()
 router.register(r'post', PostViewSet, base_name='Post')

25
投票

APIView 允许我们定义与标准 HTTP 方法相匹配的函数,如 GET、POST、PUT、PATCH 等。

Viewsets 允许我们定义与常见 API 对象操作匹配的函数,例如:LIST、CREATE、RETRIEVE、UPDATE 等。

视图集还用于编写逻辑来执行标准数据库操作以及与数据库后端交互。通常用于现有数据库模型来管理预定义对象。


15
投票

添加到 APIView 的函数与添加到 ViewSet 类的函数不同。

  • APIView:您可以为您想要在端点上支持的特定 HTTP 方法添加函数。例如:获取、发布、放置、修补、删除

  • ViewSet:您将添加代表您将在典型 API 上执行的操作的函数。例如:列表、创建、检索、更新


6
投票

Viewsets 和 APIView 都允许我们为端点编写逻辑,但 Viewsets 不定义映射到 HTTP 方法的函数,而是映射到常见 API 对象操作

© www.soinside.com 2019 - 2024. All rights reserved.