django中form的自定义校验


最近要给学校的邮件写个注册模块,好让已经毕业的学生继续使用学校的邮箱。

在写表单验证的时候出现个问题,django中form并没有提供学号类型的field(好吧,我承认哪个框架都不会提供的),但是我还地用总不能向以前那样在处理数据时做数据校验吧,于是就翻手册,找到三个解决方法,一个是自定义field,一个是使用validators,一个是重写form中和校验相关的方法。我选择了第二种,其实三种方法基本上都是一样的,就是觉得使用validator比较方便。

手册上有这样一段内容:


#A validator is a callable that takes a value and raises a 
#ValidationError if it doesn’t meet some criteria. Validators can be useful 
#for re-using validation logic between different types of fields.
#For example, here’s a validator that only allows even numbers:

from django.core.exceptions import ValidationError
    def validate_even(value):
        if value % 2 != 0:
            raise ValidationError(u’%s is not an even number’ % value)

#You can add this to a model field via the field’s validators argument:

from django.db import models
class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])

#Because values are converted to Python before validators are run, you can 
#even use the same validator with forms:

from django import forms
class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])

仿照着手册写了一个校验学号的函数,让后加入到validators中,但是又遇到一个问题,填写的数据正确的时候一切都很正常,一旦发生错误,就提示没有返回 HttpResponse对象。正常情况下如果验证失败django就会跳转到填写表单的页面,并打印错误信息,加上自定义的validators后它就不自动跳转了,以前我们可以这样写一个form的校验:

def addUser(request):
    if request.method == 'POST':
        f = form(request.POST)#从表单获取数据
        if f.is_valid():#校验数据
            pass
    else:
        pass


使用validators后就只能这样写了:


def addUser(request):
    if request.method == 'POST':
        f = form(request.POST)#从表单获取数据
        if f.is_valid():#校验数据
            pass
        else:
            pass
    else:
        pass


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值