ViewSet、ModelViewSet 和 APIView 之间的区别

Ded*_*ino 4 python django serialization django-rest-framework

ViewSetModelViewSetAPIView的优点是什么?在 django-rest-framework 文档中并不清楚,没有说明何时使用 ViewSet、ModelViewSet 和 APIView。我想实现一个 API,其中包含业务逻辑,还有具有数据处理功能的出色业务逻辑,这种情况应该使用什么?我做了很多研究,并设法了解了一些关于路由器urlpatterns的知识,但我不明白哪一个是关于视图的。

gmc*_*gmc 9

总结:一方面,您拥有APIView,这是三者中最通用的,但您必须“手动”完成几乎所有业务逻辑。你有类方法映射 http 方法 ( get,post ...)以及一些类属性来配置身份验证、渲染等内容。

通常,您将开发端点以通过 CRUD 操作与资源(实体,例如用户、产品、订单等)进行交互,这就是为什么ViewSet:它们具有更多语义类方法,例如list, create, retrieve... 路由器然后可以自动映射到 urls 和 http 方法,代价是做出一些假设:例如,retrieve假设 http 调用是GET /you_resource/<pk>. 它比通用更严格,APIView但它带走了一些样板/手动配置,在大多数情况下,您必须一次又一次地重复这些配置。

更进一步的是ModelViewSetViewSet当您使用 Django 模型时,它是for的扩展。只需指定 aserializer_class和 a 即可完成queryset所有 CRUD 操作ViewSet。显然,您还可以将自己的方法添加到 aViewSet或自定义其默认方法的行为。

根据我的经验,使用ViewSets. 代码看起来更干净,并且避免了一些样板代码。它做出的假设是合理的,我什至会说,您可能最终会得到一个更简洁的 API 设计。