django - 表单验证错误和错误代码

标签 django django-forms

在 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 中,您现在可以从表单访问原始错误数据。您可以在 ErrorListErrorDict 上调用 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/

相关文章:

django - DRF 指定所需的标题

python - 将 neo4django 与 apache 一起使用

python - 如何使用相同的CreateView和ModelForm来处理员工权限?

python - 在 Django 选择表单的模型选择字段中列出各种模型属性

python - 如何修复错误 "' id' : Select a valid choice"on Modelformset validation?

Django 1.7.4 : messages not showing up in TemplateView

python - 如何在django admin的注册表中删除用户名字段?

python - Mac osx Django PIL 错误/usr/bin/cc 重新安装时出现文件错误

python - 在 Django 中验证错误时将 css 类添加到字段

django-forms - django 1.6 自动删除或添加 http ://from URLField from form data