Python中NON_FIELD_ERRORS_KEY的解释和使用示例
发布时间:2023-12-31 18:27:10
在Python中,Django框架中定义了一个名为NON_FIELD_ERRORS_KEY的常量,它用于表示表单错误中不属于任何特定字段的错误。
NON_FIELD_ERRORS_KEY常量是一个字符串,其默认值为'__all__'。当表单校验失败时,如果存在不属于任何字段的错误,这些错误将会被放置在表单的errors属性中,其中键为NON_FIELD_ERRORS_KEY,值为一个字符串列表,表示所有的非字段错误。
以下是一个使用NON_FIELD_ERRORS_KEY的示例:
from django import forms
class MyForm(forms.Form):
name = forms.CharField(label='Name')
age = forms.IntegerField(label='Age')
def clean(self):
cleaned_data = super().clean()
name = cleaned_data.get('name')
age = cleaned_data.get('age')
if name and name.lower() != 'john' and age and age >= 18:
# 如果名称不是'john'且年龄大于等于18,则抛出一个不属于特定字段的错误
raise forms.ValidationError("You are not eligible")
return cleaned_data
在上面的示例中,我们定义了一个表单类MyForm,它包含name和age两个字段。我们覆写了clean方法,在该方法中对表单数据进行了校验。如果名称不是'john'且年龄大于等于18,则抛出了一个表单错误。
现在,让我们在视图函数中使用这个表单,并处理表单的错误:
from django.shortcuts import render
from .forms import MyForm
def my_view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# 处理表单数据
pass
else:
form = MyForm()
context = {
'form': form
}
return render(request, 'my_template.html', context)
在上述视图函数中,我们首先通过POST请求创建了一个MyForm实例,并使用is_valid方法进行表单校验。如果表单校验成功,我们可以处理表单的数据。如果校验失败,我们可以直接从表单对象的errors属性中获取非字段错误,并在模板中显示给用户。
在模板文件my_template.html中,我们可以将非字段错误显示给用户:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
{% if form.errors %}
<ul class="errorlist">
{% for error in form.errors[NON_FIELD_ERRORS_KEY] %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
<input type="submit" value="Submit">
</form>
在上面的模板中,我们首先使用form.as_p渲染表单的字段并添加CSRF令牌,然后判断表单是否有错误。如果有错误,我们通过循环遍历form.errors[NON_FIELD_ERRORS_KEY]来显示非字段错误。
总结:
NON_FIELD_ERRORS_KEY常量用于表示Django表单中不属于任何特定字段的错误。我们可以使用它来获取并处理表单校验失败时的非字段错误,并在模板中显示给用户。
