Flask下的验证层

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)
    ])

猜你喜欢

转载自blog.csdn.net/weixin_43734271/article/details/88996729