【问题标题】:Calling wtforms validations conditionally有条件地调用 wtforms 验证
【发布时间】:2020-05-31 23:49:07
【问题描述】:

我正在使用 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!')

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

【问题讨论】:

    标签: flask flask-wtforms wtforms


    【解决方案1】:

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

    我建议你直接覆盖validate:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 2021-05-25
      • 2015-07-21
      • 1970-01-01
      相关资源
      最近更新 更多