如何在wtform validate__中获取另一个字段的数据?

时间:2018-09-21 02:10:25

标签: python flask flask-wtforms

我正在尝试像这样在wtform上进行密码验证:

email = StringField('Email', validators=[DataRequired(), Email()])
def validate_password(self, password):
        print(self)
        user = dbSession.execute(
            "SELECT * FROM users WHERE email = :email",
            {"email": self.email.data}
        ).fetchone()
        print(user)
        if not bcrypt.check_password_hash(user.password, password.data):
            raise ValidationError('Incorrect Password.')

我想从其他字段获取电子邮件,但我想它不起作用,我尝试了email.data但未定义。另外,它也没有登录控制台。在js中,您记录这样的对象。我想查看自我的属性和用户,我想在python中这样登录。

console.log('user =', user);

帮助?

1 个答案:

答案 0 :(得分:0)

此答案重新定义了this little snippet

  

有时候,您需要使用自定义逻辑来验证表单,这种逻辑不一定要简化为单个字段中的验证器。登录表单就是一个很好的例子,您必须确保用户存在于数据库中并具有特定的密码。

class LoginForm(Form):
    email = TextField('Email', [validators.InputRequired(), Email()])
    password = PasswordField('Password', [validators.InputRequired()])

    def __init__(self, *args, **kwargs):
        Form.__init__(self, *args, **kwargs)
        self.user = None

    def validate(self):
        rv = Form.validate(self)
        if not rv:
            return False

        user = User.query.filter_by(
            email=self.email.data).first()
        if user is None:
            self.email.errors.append('Unknown email')
            return False

        if not bcrypt.check_password_hash(user.password, self.password.data):
            self.password.errors.append('Invalid Password')               
            return False

        self.user = user
        return True