验证器是一个可调用的函数,它接受一个值,并在不符合验证规则时抛出ValidationError 异常。
现在我们定义一个验证器,让它只接受大于4的整数:
from django import forms
from django.core.exceptions import ValidationError
# 自定义验证函数
def validate_even(value):
if value < 4:
raise ValidationError('请输入大于4的数字' )
class TestForm(forms.Form):
num = forms.IntegerField(
# 验证器,接收一个列表,列表为验证函数
validators=[validate_even]
)
我们先在 shell 中测试下这个验证器:
from myApp.forms import TestForm
f = TestForm({'num':1})
f.errors
>>> {'num': ['请输入大于4的数字']}
f = TestForm({'num':5})
f.errors
>>> {}
可以看到我们自定义的验证错误信息已经生效。
我们继续让验证器的错误信息在前端显示:
编写 test.html
<html>
<body>
<form action={% url 'test' %} method="post">
{% csrf_token %}
数字:{{ form.num }}
{# 表单的错误信息,如果表单没有错误,该字段是空的,不会显示 #}
{{ form.errors.num.as_text }}
<br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
现在网页如下:
编写视图函数:
from django.shortcuts import render
from myApp.forms import TestForm
def test(request):
context = {}
if request.method == 'GET':
form = TestForm
if request.method == 'POST':
form = TestForm(request.POST)
if form.is_valid():
num = form.cleaned_data['num']
context['form'] = form
return render(request, 'test.html', context)
else:
context['form'] = form
return render(request, 'test.html', context)
return render(request, 'test.html', context)
测试一下:
验证器成功运作了。