【问题标题】:Override response of POST in Django Rest Framework在 Django Rest Framework 中覆盖 POST 的响应
【发布时间】:2017-11-23 03:34:50
【问题描述】:

我正在使用 Django Rest Framework 的泛型 (generics.ListCreateAPIView),当我发出 POST 请求时,我得到了 Http 代码 (200/400/..etc.) 的响应和显示已发布数据的 JSON,我需要了解如何覆盖响应以获取自定义响应。

请注意,我使用

    def perform_create(self,serializer):
        return Response(<my response>)

覆盖 POST 请求处理,但我仍然得到相同的响应

【问题讨论】:

    标签: django-rest-framework django-generic-views


    【解决方案1】:

    来自perform_create 的响应被忽略。 您可能希望以 mixins 为例覆盖 create 方法

    【讨论】:

    • 我应该使用 Mixins 而不是泛型,还是有办法同时使用两者?
    • 不确定您的意思,但想法是您在代码中复制/粘贴链接的 create 方法,使用 serializer.data 作为基础来构建您自己的响应数据,最后将它们传递给回复。如果您需要对多个视图进行此操作,您应该明确考虑添加到您的视图中的 Mixin。
    • 工作中,谢谢!
    • 这样做的问题是,如果您覆盖 create 而不是 perform_create,您需要(通常)在 DRF 中的正常 create() 中复制大量代码。随着 DRF 的发展,这可能会发生变化,并且您必须从 DRF 中获取到覆盖中的每一段代码最终都会腐烂,除非得到维护。虽然您不能直接从 perform_create 返回自定义响应,但您可以派生自己的 APIExceptions 并在那里引发它们,并让默认 APIView 将它们的自定义内容传递给客户端。
    • “随着 DRF 的发展,这可能会改变”不太可能。 Python 2 迁移 appart,大部分代码已有 6 年历史,部分代码已在 4 年前优化(尽管你自己会优化得更好)。这已经足够稳定了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2016-11-13
    • 2019-05-09
    • 2017-09-23
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多