【问题标题】:Same api endpoint for CRUD operations in Django generic apiviewDjango 通用 apiview 中 CRUD 操作的相同 api 端点
【发布时间】:2020-11-29 05:20:02
【问题描述】:

我一直在为不同的请求创建不同的 api 端点,例如在通用 apiview 中用于获取、发布、删除和更新的每个 api。但是我的前端开发人员告诉我这是一个非常糟糕的做法,我需要为所有这 4 个请求提供一个 api。当我在文档中查找它时,有一个 ListCreateApiView 用于列出和创建一个对象,但我不能将它用于删除和更新。我怎样才能将这两个包含在一个端点中。我不使用模型集视图和功能视图。我主要使用通用 api 视图。

【问题讨论】:

    标签: django api crud endpoint


    【解决方案1】:

    你试过rest框架的ModelViewSet吗?

    即:

    from rest_framework.viewsets import ModelViewSet
    

    它拥有所有的 mixin (CRUD),你可以在你的 API 视图中继承它。 或者您可以根据自己的要求添加这些 mixin:

    from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
    

    您可以分别继承它们中的每一个。例如:

    Class SomeView(CreateModelMixin, DestroyModelMixin, GenericViewSet):
        pass
    

    具有创建和删除能力。您还可以将 mixins 与 GenericAPIView 一起使用:

    Class SomeView(CreateModelMixin, DestroyModelMixin, GenericAPIView):
        pass
    

    【讨论】:

    • 我不使用modelviewset,我只使用genericapiview并且对它很满意。是否有可用于通用 api 视图的 mixin,或者没有选项只能切换到 modelviewset。??
    • 我更新了我的答案...请看最后几行。
    • 这意味着我也可以在通用视图中使用 mixins 对吗?另外,请纠正我,mixins 的意思是如果我在我的视图类中使用,我可以继承这些特性,这就是为什么使用 mixins,对吧??
    • 是的,您可以在通用视图中使用它们。 Mixins 是为了提高你的类能力......你不能单独使用它们......因为它们依赖于其他类......这就是为什么你必须从 GenericAPIViewGenericViewSet 继承时从 mixins 继承。
    • 非常感谢!现在我可以使用generica api view,不需要切换到modelview set。
    猜你喜欢
    • 2020-02-28
    • 2017-10-02
    • 2019-03-09
    • 2016-09-19
    • 2021-01-27
    • 1970-01-01
    • 2022-12-22
    • 2014-06-14
    • 2020-03-29
    相关资源
    最近更新 更多