【问题标题】:Return 422 status code in ModelViewSet在 ModelViewSet 中返回 422 状态码
【发布时间】:2016-04-09 03:59:33
【问题描述】:

为了与 EmberData it seems 的互操作性,每当发生验证错误时,我需要使用 reply with 422 (Unprocessable Entity) 而不是 400 (Bad Request)。我有两个问题:

还有奖金:

  • 为什么 EmberData 需要 422?据我所知,这不是 JSONAPi 规范的一部分。

【问题讨论】:

    标签: django ember.js ember-data django-rest-framework json-api


    【解决方案1】:

    422 是 WebDAV DRF 的一部分,错误代码不在 DRF 中。 这不会阻止您使用它。它们只是数字本身的人类可读版本。

    一种选择是覆盖 rest_framework.exceptions.ValidationError.status_code 并将其设置为 422。

    编辑 - 更改默认错误代码:

    # At the top of a views.py file, by the ends of import add:
    from rest_framework.exceptions import ValidationError
    ValidationError.status_code = 422
    

    【讨论】:

    • 谢谢。我也找到了一个相关链接:github.com/tomchristie/django-rest-framework/issues/3587。但这引出了一个问题:为什么 EmberData 使用(实际上,要求)不属于 http 标准的状态码?
    • 我找到了ValidationError(github.com/tomchristie/django-rest-framework/blob/master/…)的定义,但是这个是django-rest-framework直接导入的,而且好像没有配置ValidationError类的方法,所以就算我提供了自己的子类版本,我不知道如何告诉 drf 使用它。您知道如何实现这一目标吗?
    • 谢谢,但我有一个一般性的 python 导入问题:如果我在一个视图文件 (views1.py) 中这样做,而我不在另一个视图文件 (views2.py) 中这样做,那是什么views2.py 中的 ValidationError 类中的 status_code?是改的还是原来的?我想说在任何视图文件中更改它都会全局更改它(只有一个 ValidationError 类),所以这会强制我所有的 drf 视图使用 422 status_code,对吗?在我的情况下没关系,因为我只是与 EmberData 交互,但我会说这不是一个非常干净的更改 status_code 的方法,一般来说?
    • 代码 sn-p 将改变 所有 ValidationError 实例,前提是实例本身不会在之后覆盖它。简而言之,一旦完成一次,所有 ValidationError 都会返回 422。
    • 如果您需要更细粒度的错误代码,这将更加棘手,您可能必须覆盖默认异常处理程序以根据其他条件选择要使用的返回代码。跨度>
    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 2022-01-14
    • 2018-11-14
    • 2021-12-19
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多