Django REST Framework ValidationError 始终返回 400

2023-11-27

我正在努力强迫ValidationError返回与 400 不同的状态代码。这就是我所做的:

class MyValidationError(ValidationError):
    status_code = HTTP_403_FORBIDDEN

然后在序列化器中:

def validate_field(self, value):
    raise MyValidationError

为什么我这里得到的是 400 而不是 403?有趣的是,如果我使用PermissionDenied使用自定义状态代码(我尝试过 204)而不是ValidationError,它按预期工作。


Django Rest Framework 序列化器验证所有可能的字段并最终返回错误集.

也就是说,假设您预计序列化程序中会出现两个验证错误,其中一个验证错误是由MyValidationError。在那种情况下 DRF 显然会返回HTTP 400状态码,因为设计模式DRF 未筹集的个人验证错误。

序列化器验证过程在is_valid()方法,并在方法结束时引发 ValidationError 。

def is_valid(self, raise_exception=False):
    ....code
    ....code
    if self._errors and raise_exception:
        raise ValidationError(self.errors)

    return not bool(self._errors)

and the ValidationError阶级提升HTTP 400

class ValidationError(APIException):
    status_code = status.HTTP_400_BAD_REQUEST
    default_detail = _('Invalid input.')
    default_code = 'invalid'
    .... code


为什么权限被拒绝返回自定义状态代码?

In the is_valid()(源代码)方法,它抓住了only ValidationError

if not hasattr(self, '_validated_data'):
    try:
        self._validated_data = self.run_validation(self.initial_data)
    except ValidationError as exc:
        self._validated_data = {}
        self._errors = exc.detail
    else:
        self._errors = {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django REST Framework ValidationError 始终返回 400 的相关文章

随机推荐

  • BULK INSERT 内部如何工作?

    有人可以解释一下 BULK INSERT 内部是如何工作的以及为什么它比正常的 INSERT 操作快得多吗 问候 希希尔 BULK INSERT 与 SQL Server 的数据库引擎一起在进程内运行 从而避免通过客户端 API 的网络层传
  • Ember.js:控制器之间的数据绑定

    我正在尝试将 ApplicationController 绑定到 IndexController 这是我的jsfiddle 总而言之 这是我在应用程序控制器中的绑定 indexIsClickedBinding App indexContro
  • 如何引用 Visual Studio 项目中用户定义段的开头?

    我正在努力转换与 gnu 工具链的 ld 链接的 C 程序 使其编译为 Visual studio 2005 项目 该程序将 data symbol 放在不同的段中并在 初始化阶段它在段之间复制数据 指向的指针 段的开始和结束在 ld 链接
  • 协议术语:消息与数据包

    在实践中 对于采用更高级别协议 例如 TCP IP 之上的协议 通过网络传输的通信最合适的术语是什么 具体来说 我指的是小的二进制数据单元 我在各种客户端 服务器库中都看到过 消息 和 数据包 但我对社区的共识感兴趣 这些绝对是消息 数据包
  • Pyinstaller 和 Pycrypto

    我们最近将 pycrypto 添加到我们一直在开发的项目中 现在我无法在使用 pyinstaller 构建该软件后运行该软件 我在 pyinstaller 中遇到了新软件包的问题 但我无法特别修复这个问题 我在尝试运行构建的软件时遇到的错误
  • 我收到错误:未定义的类“必需”。当尝试使用必需的关键字时

    我收到错误 未定义的类 必需 当尝试使用必需的关键字时 这是代码示例 class Field final int id final String name final bool userEditable final String title
  • 在清单中具有共享用户证书功能的 Windows Phone 8.1 应用程序中出现部署错误

    如果我检查 Windows Phone 8 1 应用程序清单中的 共享使用的证书 功能 我会收到以下错误 错误 DEP0001 意外错误 无法注册包 HRESULT 异常 0x80073CF6 Manifest
  • 如何使用android API从android中获取wifi网络的名称?

    我认为我应该使用 NetworkInterface getDisplayName 我有一些名称 但这个名称与我在选择要连接的网络时看到的名称不同 android net wifi WifiInfo getSSID WifiManager w
  • 为什么 Tuple 或 KeyValueItem 没有 setter?

    我需要一个包含一对值的结构 其中的值将被更改 所以我的第一个想法是使用 KeyValueItem 或 Tuple 但后来我发现它们只有一个吸气剂 我不明白为什么 在我的情况下你会用什么 我可以创建自己的类 但是还有其他方法吗 它们是不可变的
  • iOS - 将图像保存为jpg格式

    我的问题是图像保存的格式是什么 是dat还是jpg 这是我使用的代码 NSString urlImage NSString folderPath NSString imageName urlImage componentsSeparated
  • 烧瓶在容器内工作,但当我将其向前移动时却无法工作

    我正在尝试 我正在尝试使用 docker 运行一个简单的 Flask 应用程序 使用this网站作为参考 我的泊坞窗文件 FROM ubuntu latest RUN apt get update y RUN apt get install
  • 如何在 F# 中获取函数参数的名称?

    我可以编写一个返回作为参数给出的函数名称的函数吗 let funName f string returns the name of f 例如 如果我通过printfn作为 funName 的参数 它返回 printfn gt funName
  • 用于单元测试的 EmberJS 服务注入 (Ember QUnit)

    Specs 灰烬版本 1 13 8 节点 0 10 33 npm 2 13 4 I have import Alias from services alias moduleFor controller test Controller tes
  • PostgreSQL的括号规则,有总结指南吗?

    在数学和许多编程语言中 我认为标准SQL也 括号改变优先级 首先对要评估的部分进行分组 或增强可读性 对于人眼 等效示例 SELECT array 1 2 gt array 1 SELECT array 1 2 gt array 1 SEL
  • jQuery 文本到链接脚本? [复制]

    这个问题在这里已经有答案了 有谁知道有一个脚本可以选择对 URL 的所有文本引用并自动将其替换为指向这些位置的锚标记 For example http www google com would automatically turn into
  • 在 Safari iOS 13 + 上禁用双击缩放

    如何在 Safari iOS 13 移动设备上禁用 双击缩放 有时会缩放 有时则不会 我觉得它可能只适用于特定的 HTML 元素 我读到 双击缩放 应该在 iOS 13 上默认禁用 只有捏合缩放才可以工作 但事实并非如此 您可以添加以下元标
  • ReactJS onClick setState 到不同的元素

    我是新来反应的 我遇到了一个小问题 也许有人可以帮助我 所以问题是我无法使用 onCLick 函数触发我想要的元素 现在我试图删除导航 import React from react import ReactDOM from react d
  • jQuery / ajax 上传图像并保存到文件夹

    更新下面的代码 我发现一些代码能够上传图像并显示其缩略图 但是 我也想将图像保存到特定文件夹中 我可以使用什么 jQuery 代码或 ajax 代码将原始图像保存到我选择的文件夹中 这是现场演示 http jsfiddle net dn9S
  • 展平浅嵌套列表的习惯用法:它是如何工作的?

    我在我正在开发的模块中找到了这段代码 l opaque function thingys x for y in l for x in y 我读不懂这个 通过实验 我能够确定它正在展平 2 级嵌套列表 但语法对我来说仍然不透明 它显然省略了一
  • Django REST Framework ValidationError 始终返回 400

    我正在努力强迫ValidationError返回与 400 不同的状态代码 这就是我所做的 class MyValidationError ValidationError status code HTTP 403 FORBIDDEN 然后在