有条件地调用 wtforms 验证



我正在使用wtforms编写登录页面。这些字段是用户名和密码。下面是为两个字段定义的两个验证。如果用户名上的验证方法引发异常,有没有办法停止在密码字段上执行验证功能

def validate_username(self, field):
# Check if not None for that username!
print('Inside check_username')
if User.query.filter_by(username=field.data).first() is None:
raise ValidationError(f'Sorry username : {field.data} is not registered!')
def validate_password(self, field):
# Below is not the actual code.This method will contain code to check of valid password.
raise ValidationError(f'Sorry username : {field.data} is not registered!')

现在发生的事情是上述两种方法都被调用,这是预期的,但如果用户名不存在,我不想检查密码

您无法停止尝试验证每个字段的 wtforms。

我建议你简单地覆盖验证:

def validate(self):
if not super().validate():
return False
if User.query.filter_by(username=self.username.data).first() is None:
self.errors["username"] = f'Sorry username : {self.username.data} is not registered!'
return False
if not check_that_password():
self.errors["password"] = f"Bad password for user {self.username.data}"
return False
return True

最新更新