切换主题
一、表单验证
一、安装
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