自定义验证器

验证器是一个可调用的函数,它接受一个值,并在不符合验证规则时抛出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)

测试一下:

验证器成功运作了。

推荐阅读更多精彩内容