我的表单中有一个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,以便将其显示在我的密码字段下,我将很高兴知道。
答案 0 :(得分:1)
我想我已经为您找到了解决方案。那是你想要的吗?
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
列表。
请确保您不告诉用户哪个表单字段包含错误,并且用户可以更轻松地猜测访问数据。