【flask-wtf】 表单验证器
一、安装库包
pip install flask-wtf
二、使用表单类创建验证器类
首先代码展示:
#从框架中引入原始类
import wtforms
from wtforms.validators import Email, Length, EqualTo
from models import UserModel
from exts import redis
class RegistrationForm(wtforms.Form):
email = wtforms.StringField(validators=[Email(message="邮箱格式错误")])
captcha = wtforms.StringField(validators=[Length(min=4,max=4,message="验证码格式错误")])
username = wtforms.StringField(validators=[Length(min=3,max=20,message="用户名格式错误")])
password = wtforms.PasswordField(validators=[Length(min=6, max=20, message="密码格式错误")])
password_confirm = wtforms.PasswordField(validators=[EqualTo("password")])
#自定义验证
def validate_email(self, field):
email = field.data
user = UserModel.query.filter_by(email = email).first()
if user:
raise wtforms.ValidationError(message="该邮箱已被注册")
def validate_captcha(self, field):
captcha = field.data
code = redis.get("mail:" + self.email.data).decode()
if code!=captcha:
raise wtforms.ValidationError(message="验证码不正确")
这里首先是需要继承原始类(wtforms.Form)来创建子类验证器类(RegistrationForm)。
然后通过表单域类型来创建相关的表单元素,这里附带了相关的验证方式。
可以用于验证表单填写数据正确与否的验证方法:
还可以通过自定义来创建验证方式:
validation_表单元素名:这里的表单元素名是前端给后端传递的元素名,需要匹配。
其中传入的self是子类验证器类的self对象,里面包含了所定义的数据,可以通过它来访问除了email之外的其他元素数据。
#自定义验证
def validate_email(self, field):
email = field.data
user = UserModel.query.filter_by(email = email).first()
if user:
raise wtforms.ValidationError(message="该邮箱已被注册")
三、验证器的使用
导入验证器类
from .form import RegistrationForm
使用验证器类去验证表单元素填写是否正确
#这里输入对象需要跟验证器类书里面的数据名一一对应,否则无法对应上
form = RegistrationForm(request.form)
#如果验证没有问题
if form.validate():
# 1. 创建ORM对象
user = UserModel(username=form.username.data, password=form.password.data, email=form.email.data, create_time=datetime.now());
# 2. 将ORM对象添加到db.session中
db.session.add(user);
# 3. 将db.session中的改变同步到数据库中
db.session.commit();
return jsonify({"code":200,"message":"账号创建完成","data":None})
else:
return form.errors