(9) 第9章:wtform校验

wfform校验的变量名就是在前段设置的元素的name属性字段

from wtforms import Form, StringField, PasswordField

继承Form类,实现数据的校验
StringField表示校验的数据是字符串
PasswordField表示校验的是密码 密码字段,自动将输入转化为小黑点
DateField文本字段,格式要求为datetime.date一样
IntergerField文本字段,格式要求是整数
DecimalField文本字段,格式要求和decimal.Decimal一样
FloatField文本字段,值是浮点数
BooleanField复选框,值为True或者False
RadioField一组单选框
SelectField下拉列表,需要注意一下的是choices参数确定了下拉选项,但是和HTML中的 标签一样,其是一个tuple组成的列表,可以认为每个tuple的第一项是选项的真正的值,而第二项是alias。
MultipleSelectField可选多个值的下拉列表

from wtforms import Form, StringField, PasswordField
from wtforms.validators import Length, DataRequired, Email, ValidationError, EqualTo
class RegisterForm(Form):
	email = StringField(validators=[
        DataRequired(), Length(8, 64), Email(message='电子邮箱不符合规范')])

    password = PasswordField(validators=[
        DataRequired(message='密码不可以为空,请输入你的密码'), Length(6, 32)])

    nickname = StringField(validators=[
        DataRequired(), Length(2, 10, message='昵称至少需要两个字符,最多10个字符')])

	如有一个email字段需要校验,校验这个的时候就会默认取调用下面的方法执行某些操作
	如查询数据库看这个邮箱是否存在,如存在则抛出wtform自带的ValidationError异常
    def validate_email(self, field):
        # 依据email查询   first触发查询  返回结果是否有数据
        if User.query.filter_by(email=field.data).first():
            raise ValidationError('该电子邮件已被注册')

    def validate_nickname(self, field):
        if User.query.filter_by(nickname=field.data).first():
            raise ValidationError('昵称已存在')

EqualTo(‘password2’, message=‘两次输入的密码不相同’)
表示当前校验的数据是否和password2参数是否相同

class ChangePasswordForm(Form):
    old_password = PasswordField(validators=[DataRequired()])
    new_password1 = PasswordField(validators=[
        DataRequired(), Length(6, 32, message='密码长度至少需要在6到32个字符之间'),
        EqualTo('new_password2', message='两次输入的密码不相同')])
    # EqualTo对比两个字段的字符串是否相同
    new_password2 = PasswordField(validators=[DataRequired(), Length(6, 32)])

Regexp,也是validators的参数,表示可以使用正则表达式,如校验手机号,如下

Regexp('^1[0-9]{10}$', 0, '请输入正确的手机号')  使用正则表达式校验手机号

你可能感兴趣的:(python)