我正在努力强迫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(使用前将#替换为@)