как получить данные другого поля в wtform validate_? - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь выполнить проверку пароля в 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);

help?

1 Ответ

0 голосов
/ 21 сентября 2018

Этот ответ переформулирует этот небольшой фрагмент

Иногда вы находитесь в ситуации, когда вам нужно проверить форму с помощью пользовательской логики, которую необязательно можно свести к валидатору наединое поле.Хорошим примером являются формы входа в систему, где вы должны убедиться, что пользователь существует в базе данных и имеет определенный пароль.

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
...