在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
)未在任何地方传递,在表单验证后无法获取。
有人可以解释使用此错误代码的目的是什么吗?
答案 0 :(得分:16)
在Django 1.7中,您现在可以从表单中访问原始错误数据。您可以在as_data()
或ErrorList
上调用ErrorDict
方法。例如: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"}
]}
答案 1 :(得分:1)
看看django src中的ValidationError定义,它被用作传递附加标识符的便捷方式(类似于标准python异常中的e.errno
),你可以像这样使用它:
try:
...
raise ValidationError(u'Oops', code=0x800)
...
except ValidationError as e:
print "Error code: ", e.code