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, '请输入正确的手机号') 使用正则表达式校验手机号