Skip to content

一、表单验证

一、安装

bash
pip install flask-wtf

二、前端表单

前端表单注意以下几点

1、form的action和method

python
<form action="url_for({{bp.method}})" method="POST"></form>

2、input的name属性和后端表单验证的字段需要一致

python
<input type="text" name="username"/>

后端

python
username=wtforms.StringField(validators=[Length(min=3,max=20,message="请输入正确长度的用户名")])

3、form里的button需要阻止默认事件

三、表单类编写

python
class ResisterForm(wtforms.Form):
    email=wtforms.StringField(validators=[wt_Eamil(message="邮箱格式错误!")])
    captcha=wtforms.StringField(validators=[Length(min=6,max=6,message="验证码格式错误")])
    username=wtforms.StringField(validators=[Length(min=3,max=20,message="用户名格式错误")])
    password=wtforms.StringField(validators=[Length(min=6,max=16,message="密码格式错误")])
    password_comfirm=wtforms.StringField(validators=[EqualTo("password",message="俩次密码不一致")])

1、Field类的类型

字段类型描述
StringField字符串类型
IntegerField整型类型
FloatField浮点类型
DecimalField定点类型
BooleanField布尔类型
DateTimeField日期时间类型
DateField日期类型
TimeField时间类型
FileField文件类型

2、WTForms常用验证器

验证器描述
length(min,max,message)验证长度是否在区间内
email()验证内容是否满足邮箱格式规则
equal_to(fieldname,message)验证是否和另外一个字段的值相等
ip_address(ipv4,ipv6,message)验证是否满足 IP 地址的规则
mac_address(message)验证是否满足 mac 地址的规则
number_range(min,max,message)验证数字是否在指定的区间内
optional(strip_whitespace)设置数据可以为空,并停止其他验证器的验证
input_required(message)验证是否为空
data_required(message)验证是否有效
url(message)验证是否满足 URL 规则
any_of(values,message,values_formatter)验证是否是 values 中的一个
none_of(values,message,values_formatter)验证是否不是 values 中的一个
regexp(regex,flags,message)自己指定正则表达式验证

四、自定义验证字段

如果要自定义某个字段的验证逻辑,可以通过在表单类中自定义方法validate_<字段名>来实现

以验证 email 为例

python
from wtforms import Form,StringField,ValidationError
......

registed_email =['aa@example.com','bb@example.com']
class RegisterForm(wtforms.Form):
    ...... 
	def validate_email(self, field):
		email = field.data
        if email in registed_email:
            raise ValidationError("邮箱已经被注册!")
		return True