ViewSet,ModelViewSet和APIView之间的区别

时间:2020-02-07 14:55:43

标签: python django serialization django-rest-framework

ViewSet ModelViewSet APIView 有什么优点。在django-rest-framework文档中尚不清楚,它没有说何时使用ViewSet,ModelViewSet和APIView。我想实现一个在其中具有业务逻辑的API,以及一个具有数据处理功能的出色业务逻辑,在这种情况下应使用什么? 我做了很多研究,并设法对 routers urlpatterns 有所了解,但是我不了解关于视图的哪个。

1 个答案:

答案 0 :(得分:4)

总结:一方面,您拥有APIView,这是三者中最通用的,但是在其中,您必须“手动”执行几乎所有业务逻辑。您具有映射http方法(getpost等)的类方法,以及一些用于配置身份验证,呈现等内容的类属性。

通常,您将开发端点以通过CRUD操作与资源(实体,例如用户,产品,订单等)进行交互,这就是ViewSet的目的:它们具有更多的语义类方法,例如listcreateretrieve ...路由器随后可以自动映射到url和http方法,而付出一些假设:例如,retrieve假设http调用为GET /you_resource/<pk>。它比一般的APIView更为严格,但是它使您失去了一些重复的模板/手动配置,在大多数情况下,您必须一次又一次地重复该操作。

更进一步的是ModelViewSet,它是ViewSet的扩展,适用于使用Django模型的情况。只需指定serializer_classqueryset,您就可以准备使用ViewSet的所有CRUD操作。显然,您也可以将自己的方法添加到ViewSet或自定义其默认方法的行为。

根据我的经验,使用ViewSets值得。该代码看起来更简洁,您可以避免使用一些样板代码。它所做的假设是合理的,我什至会说,您可能最终会遵循它们而采用更简洁的API设计。