Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ViewSet、ModelViewSet和APIView之间的差异_Python_Django_Serialization_Django Rest Framework - Fatal编程技术网

Python ViewSet、ModelViewSet和APIView之间的差异

Python ViewSet、ModelViewSet和APIView之间的差异,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,视图集、模型视图集和APIView的优点是什么。在django rest框架文档中,不清楚何时使用ViewSet、ModelViewSet和APIView。我想实现一个API,其中包含一个业务逻辑,一个伟大的数据处理业务逻辑,在这种情况下应该使用什么? 我做了很多研究,并设法对路由器和urlpatterns有了一些了解,但我不知道哪一个是关于视图的。总结:一方面,你有APIView,这是三种模式中最通用的,但你也必须“手动”完成几乎所有的业务逻辑。您有映射http方法的类方法(get,post,

视图集模型视图集APIView的优点是什么。在django rest框架文档中,不清楚何时使用ViewSet、ModelViewSet和APIView。我想实现一个API,其中包含一个业务逻辑,一个伟大的数据处理业务逻辑,在这种情况下应该使用什么?
我做了很多研究,并设法对路由器和urlpatterns有了一些了解,但我不知道哪一个是关于视图的。

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

通常,您会开发端点,通过CRUD操作与资源(实体,如用户、产品、订单等)交互,这就是
ViewSet
的用途:它们有更多的语义类方法,如
list
create
retrieve
。。。路由器然后可以自动映射到URL和http方法,而不必做一些假设:例如,
retrieve
假设http调用是
GET/you\u resource/
。它比一般的
APIView
更为严格,但它会从您身上带走一些样板/手动配置,在大多数情况下,您必须一次又一次地重复这些配置

进一步的一步是
ModelViewSet
,它是使用Django模型时
ViewSet
的扩展。只需指定一个
serializer\u类
和一个
queryset
即可执行
ViewSet
的所有CRUD操作。显然,您还可以将自己的方法添加到
ViewSet
或自定义其默认方法的行为


根据我的经验,使用
viewset
是值得的。代码看起来更干净,避免了一些样板代码。它所做的假设是合理的,我甚至可以说,您最终可能会得到一个更干净的API设计?如果是,如何进行?因为我不知道我在哪里这么做,所以更好地理解代码。请看文档的第一个示例:它们“手动”执行每个业务逻辑,您可以将任何您想要的内容放在那里