Flask下的验证层
# 验证层,验证注册的用户
from wtforms import StringField, Form, PasswordField
from wtforms.validators import DataRequired, Length, Email, ValidationError, EqualTo
from app.models.user import User
# 只验证字面意思,没有验证业务的逻辑,比如邮箱重复注册,用户名同名
class RegisterForm(Form):
# DataRequired()检查传入的值是否为真,如果为0则返回后面的信息
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='昵称至少要2个字符,最多10个字符')
])
# 自定义验证器validate_email
def validate_email(self, field):
# db.session
# 实现在数据库中验证是不是已经存在email
# .first实现触发
# filter_by传入一组验证消息
if User.query.filter_by(email=field.data.first()):
# 如果存在,则抛出一个ValidationError异常
raise ValidationError('电子邮件已被注册')
def validate_nickname(self, field):
# db.session
if User.query.filter_by(nickname=field.data.first()):
raise ValidationError('昵称已存在')
# 登入页面的验证层
class LoginForm(Form):
email = StringField(validators=[DataRequired(), Length(8, 64),
Email(message='电子邮箱不符合规定')])
password = StringField(validators=[
DataRequired(message='密码不能为空,请输入你的密码'), Length(6, 32)
])
# DataRequired()检查传入的值是否为真,如果为0则返回后面的信息
class EmailForm(Form):
email = StringField(validators=[DataRequired(), Length(8, 64),
Email(message='电子邮箱不符合规定')])
class ResetPassWordForm(Form):
passwd1 = PasswordField(validators=[
DataRequired(),# 用了DataRequired验证器
Length(6, 32, message='密码至少在6到32个字符之间'),
EqualTo('passwd2', message='两次输入密码不相同')# 两次密码进行对比
])
passwd2 = PasswordField(validators=[
DataRequired(), Length(6, 32)
])