WtForms validators表单验证

本文只是个人学习所做,有些地方根据英语来不是很通顺,想看原文,请参考  Validators


Validators简介

Validators是一个可以很轻松的实现诸如输入字符长度等的验证器,当验证失败的时候调用ValidationError。这个模块非常的简单、灵活,并且允许你在filed中添加任意多个验证器。

 

当验证失败的时候将会调用ValidationError,

Class  wtforms.validators.ValidationError(message=u''*args**kwargs)

Class  wtforms.validators.StopValidation(message=u''*args**kwargs)

当StopValidation被调用时将会引起对验证链的中断,不会在进行后续的验证,如果是被一个消息所引起,那么这个消息将会被添加到错误列表中。

 

 

内置的验证器

Class  wtforms.validators.DataRequired(message=None)

此验证器将会检测field是否输入了数值,实际上是进行了if field.data操作。并且,如数数据是一个字符串,那么只包含空格的字符串将会被认为是False。

参数:message-当验证失败时返回的错误消息数:message-当验证失败时返回的错误消息

 

class  wtforms.validators.Email(message=None)

此验证器验证Email的地址,注意只会验证Email的格式,最好在使用的时候你能够自己校验他的真实性,比如激活或者查找

参数:message-当验证失败时返回的错误消息验证失败时返回的错误消息

 

 

class wtforms.validators.EqualTo(fieldnamemessage=None)

用于比较两个Field的数据是否相等。

参数:     filedname-你要比较的另一个Field的名称

message-当验证失败时返回的错误消息,可以用%(other_label)s和 %(other_name)s来更提供更多的错误消息

此验证器可用于验证一个或者多个相同field的情景,更改密码的代码

 

class ChangePassword(Form):

    password = PasswordField('NewPassword', [InputRequired(), EqualTo('confirm', message='Passwords must match')])

    confirm  = PasswordField('Repeat Password')

在此例子中,用IputRequired验证器来防止EqualTo验证器来匹配密码当password为空的时候,当InputRequired为空的时候就会停止验证。

 

class  wtforms.validators.InputRequired(message=None)

用于验证field有数据输入,注意与DataRequired的区别,InputRequired主要看是否输入了数据,而DataRequired用于那些强制Post的数据

 

 

class wtforms.validators.IPAddress(ipv4=Trueipv6=Falsemessage=None)

ipv4-当为Ture时,允许有效的IPv4地址(默认为True)

ipv6-当为Ture时,允许有效的IPv6地址(默认为False)

参数:message-当验证失败时返回的错误消息

 

 

class  wtforms.validators.Length(min=-1max=-1,message=None)

验证字符串的长度

min-输入的最小的字符串长度,如果未指定,则不校验最小字符串

max-输入的最大的字符串长度,如果未指定,则不校验最大字符串

message-当验证失败时返回的错误消息,如果需要,可以通过%(min)d,%(max)d来自行设置

 

 

class  wtforms.validators.MacAddress(message=None)

验证MAC地址

message-当验证失败时返回的错误消息

 

class  wtforms.validators.NumberRange(min=Nonemax=None,message=None)

用于验证数据是否在最小值与最大值之间,支持的常用的数据类型,如float等,不只是int

min-输入的最小的字符串长度,如果未指定,则不校验最小字符串

max-输入的最大的字符串长度,如果未指定,则不校验最大字符串

message-当验证失败时返回的错误消息,如果需要,可以通过%(min)d,%(max)d来自行设置

 

 

class  wtforms.validators.Regexp(regexflags=0message=None)

通过正则表达式验证

regex-正则表达式,也可以通过参数传递

flags-regex使用标示,如re.IGNORECASE,如果regex不是一个字符串将忽略

message-当验证失败时返回的错误消息

 

 

class  wtforms.validators.URL(require_tld=Truemessage=None)

通过正则表达式对URL进行简单的验证,与Email验证器相似,可能在之后需要其他的方式验证其真实性

require_tld-当设置为True时,必须在域名中包含顶级域名等,当需要验证localhost时设置为False

 

 

 

自定义验证器

开始做一个可复用的验证器,简单的namefield验证器

class MyForm(Form):

    name = StringField('Name', [InputRequired()])

 

    def validate_name(form, field):

        if len(field.data) > 50:

            raise ValidationError('Name must be less than 50 characters')

我们可以将函数放在类中,也可以将函数放在类外任何可以调用到函数的地方,如下:

def my_length_check(form, field):

    if len(field.data) > 50:

        raise ValidationError('Field must be less than 50 characters')

 

class MyForm(Form):

    name = StringField('Name', [InputRequired(), my_length_check])

 

 

我们也可以通过创建一个工厂来让验证器更强大

def length(min=-1, max=-1):

    message = 'Must be between %d and %d characters long.' % (min, max)

 

    def _length(form, field):

        l = field.data and len(field.data) or 0

        if l < min or max != -1 and l > max:

            raise ValidationError(message)

 

    return _length

 

class MyForm(Form):

    name = StringField('Name', [InputRequired(), length(max=50)])

 

现在我们创建了一个可控制长度的字符串长度验证器,下面我们将验证器做的可复用性更高,并且让用户可以自定义自己的错误消息:


class Length(object):

    def __init__(self, min=-1, max=-1, message=None):

        self.min = min

        self.max = max

        if not message:

            message = u'Field must be between %i and %icharacters long.' % (min, max)

        self.message = message

 

    def __call__(self, form, field):

        l = field.data and len(field.data) or 0

        if l < self.min or self.max != -1 and l > self.max:

            raise ValidationError(self.message)

 

length = Length

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值