APIView类和viewsets类之间的区别?

18 django django-views django-rest-framework

有什么区别APIView类和viewsets类?我正在关注Django REST框架官方文档.我认为它缺乏例子.

你能用一个合适的例子解释上述差异吗?

alp*_*iii 27

APIView是您在定义REST视图时通常会覆盖的最基本的类.您通常会定义诸如get,put,delete等方法(http://www.cdrf.co/3.5/rest_framework.views/APIView.html).使用API​​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
Run Code Online (Sandbox Code Playgroud)

因为某些事情比如获取/ post/4,删除/发布/ 4,获取所有帖子,更新和创建新帖子都是如此常见,DRF提供了Viewsets.

但在您了解Viewsets之前,我先告诉您,还有通用类,他们做的事情非常好,但您需要提供完整的API端点,就像我使用MyAPIView视图一样(再次获取更多信息,请查看http:// www.cdrf.co/http://www.django-rest-framework.org/).所以你必须定义自己的网址路径.

但是使用ViewSets,您可以创建实际上合并所有上述操作的视图集,并且您也不需要定义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')
Run Code Online (Sandbox Code Playgroud)

  • /sf/answers/3464288061/ 总结得很漂亮。 (4认同)

Pra*_*pta 15

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

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

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


dPa*_*Pac 10

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

  • APIView:您为要在端点上支持的特定 HTTP 方法添加函数。例如:GET、POST、PUT、PATCH、DELETE

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


小智 5

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