【问题标题】:Difference between ViewSet, ModelViewSet and APIViewViewSet、ModelViewSet、APIView的区别
【发布时间】:2020-05-23 17:34:28
【问题描述】:

ViewSetModelViewSetAPIView有什么优势。在 django-rest-framework 文档中并不清楚,没有说明何时使用 ViewSet、ModelViewSet 和 APIView。我想实现一个 API,其中有一个业务逻辑,一个很好的数据处理业务逻辑,这种情况应该使用什么? 我研究了很多,对 routersurlpatterns 有了一些了解,但我不明白关于视图的哪一个。

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我可以在 ViewSets 中包含一个庞大的业务逻辑吗?如果是,如何?因为我看不到我在哪里这样做,所以用 code 更好地理解
    • 请看文档的第一个示例:django-rest-framework.org/api-guide/viewsets 他们“手动”完成所有业务逻辑,您可以随心所欲地放在那里
    猜你喜欢
    • 2017-06-12
    • 2021-01-16
    • 1970-01-01
    • 2018-11-24
    • 2020-05-06
    • 2019-07-09
    • 2015-10-25
    • 2017-05-13
    • 2020-07-22
    相关资源
    最近更新 更多