Flask表单、自定义验证错误/函数

2024-05-03 02:54:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我的表单中有一个login()函数,我想返回其中特定字段的错误,我的问题是,我如何做类似的事情,这是我当前的函数:

class LoginForm(FlaskForm):
    email = StringField('Email',
                        validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')
    submit = SubmitField('Login')

    def validate_email(self, email):
        user = models.User.query.filter_by(email=email.data).first()

        if user is None:
            raise ValidationError('Such user not found')

    def login(self, user):
        if check_password_hash(user.password, self.password.data):

            flash('Logged in successfully!', category='success')

            login_user(user, remember=self.remember.data)

            return True

        else:
            raise LoginException('Wrong Password')


我应该只是闪现错误,还是应该将其重新制作成一个单独的验证密码功能?例如,如果有一种方法可以返回LoginException,使其显示在我的密码字段下,我很乐意知道


Tags: 函数selfdataifemaildef错误login
1条回答
网友
1楼 · 发布于 2024-05-03 02:54:11

我想我已经为你找到了解决办法。这就是你想要的吗

def valid_credentials(form, field):
    user = User.query.filter_by(email=form.email.data).first()
    return user and user.verify_password(form.password.data)


class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')
    submit = SubmitField('Login')

    def validate_email(self, field):
        if not valid_credentials(self, field):
            raise ValidationError('Invalid user credentials.')

    def validate_password(self, field):
        if not valid_credentials(self, field):
            raise ValidationError('Invalid user credentials.')

class User(db.Model):
    email = db.Column(db.String,
        nullable=False, unique=True, index=True)
    password_hash = db.Column(db.String,
        nullable=False, unique=False, index=False)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

您还可以将valid_credentials (form, field)移动到表单中,和/或只向validators列表传递一个验证函数

确保您没有告诉用户哪个表单字段包含错误,并且用户可以更容易地猜测访问数据

相关问题 更多 >