在 Django 文档中 https://docs.djangoproject.com/en/dev/ref/forms/validation/#raising-validationerror说在引发 ValidationError 异常时提供错误代码是一种很好的做法。
# Good
ValidationError(_('Invalid value'), code='invalid')
# Bad
ValidationError(_('Invalid value'))
我的应用程序中有 API,并且我正在使用表单来验证输入数据。
如果表单无效,我想获取这些错误代码(而不是错误消息)。
所以我查看了BaseForm的_clean_fields方法的源代码:
https://github.com/django/django/blob/master/django/forms/forms.py#L278
except ValidationError as e:
self._errors[name] = self.error_class(e.messages)
if name in self.cleaned_data:
del self.cleaned_data[name]
据我了解,这个参数(self.code
)没有传递到任何地方,并且在表单验证后无法获取。
有人可以解释一下使用此错误代码的目的吗?
最佳答案
在 Django 1.7 中,您现在可以从表单访问原始错误数据。您可以在 ErrorList
或 ErrorDict
上调用 as_data()
方法。例如:my_form.errors.as_data()
。这基本上为您提供了原始的 ValidationError 对象而不是消息本身。从中您可以访问 .code
属性,例如:my_form.errors["__all__"].as_data()[0].code
。
您还可以序列化表单错误,这对 API 来说非常有用:
>>> print(form.errors.as_json())
{"__all__": [
{"message": "Your account has not been activated.", "code": "inactive"}
]}
关于django - 表单验证错误和错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18781492/