ViewSet , ModelViewSet 和 APIView 有什么优点。在django-rest-framework文档中尚不清楚,它没有说何时使用ViewSet,ModelViewSet和APIView。我想实现一个在其中具有业务逻辑的API,以及一个具有数据处理功能的出色业务逻辑,在这种情况下应使用什么? 我做了很多研究,并设法对 routers 和 urlpatterns 有所了解,但是我不了解关于视图的哪个。
答案 0 :(得分:4)
总结:一方面,您拥有APIView
,这是三者中最通用的,但是在其中,您必须“手动”执行几乎所有业务逻辑。您具有映射http方法(get
,post
等)的类方法,以及一些用于配置身份验证,呈现等内容的类属性。
通常,您将开发端点以通过CRUD操作与资源(实体,例如用户,产品,订单等)进行交互,这就是ViewSet
的目的:它们具有更多的语义类方法,例如list
,create
,retrieve
...路由器随后可以自动映射到url和http方法,而付出一些假设:例如,retrieve
假设http调用为GET /you_resource/<pk>
。它比一般的APIView
更为严格,但是它使您失去了一些重复的模板/手动配置,在大多数情况下,您必须一次又一次地重复该操作。
更进一步的是ModelViewSet
,它是ViewSet
的扩展,适用于使用Django模型的情况。只需指定serializer_class
和queryset
,您就可以准备使用ViewSet
的所有CRUD操作。显然,您也可以将自己的方法添加到ViewSet
或自定义其默认方法的行为。
根据我的经验,使用ViewSets
值得。该代码看起来更简洁,您可以避免使用一些样板代码。它所做的假设是合理的,我什至会说,您可能最终会遵循它们而采用更简洁的API设计。