Проверка в реальном времени на wtform. Могу ли я получить доступ к валидаторам на переднем конце?

У меня есть класс wtform, который выглядит примерно так:

class Registration(Form):
  email = StringField('Email', validators=[Required(), Email()])
  username = StringField('Username', validators=[Required()])
  name = StringField('Name', validators=[Required()])
  password = PasswordField('Password',
    validators=[
      Required(),
      EqualTo('confirm_password', message='Your passwords did not match'),
      Length(min=6, max=20, message='passwords must be longer than 6 characters')
    ])
  confirm_password = PasswordField('Confirm Password', validators=[Required()])
  submit = SubmitField('Register')

  def validate_email(self, field):
    if User.query.filter_by(email=field.data).first():
      raise ValidationError('Email already registered')

  def validate_username(self, field):
    if User.query.filter_by(username=field.data).first():
      raise ValidationError('Username already exists')

Я предполагаю, что WTForms не предлагает какой-либо формы встроенной проверки в реальном времени на внешнем интерфейсе, и это хорошо, но мне интересно, есть ли способ выполнить проверку в реальном времени, используя валидаторы для полей и используя их в некоторых вид javascript.

Например, поле пароля. Пароль должен быть длиннее 6 символов. В этом случае я хочу показать форму проверки примерно так, как они ее набирают:что происходит, когда они вводят неверный пароль

Однако, как только они введут пароль действительной длины, он покажет это:они продолжают печатать и делают правильный пароль

У меня проблема с доступом к требованиям и валидаторам wtform, как на странице. Возможно ли это сделать?

1 ответ

Решение

Метод, который я использую, не совсем тривиален, но и не слишком сложен. Я прикрепляю обработчики к событиям изменения или размытия в полях, которые хочу проверить. Когда я получаю это событие, мой обработчик собирает значения для всех полей в форме и отправляет ajax-запрос POST на сервер. Сервер теперь имеет всю форму и может выполнять проверку с помощью WTForms. Ответ JSON на этот запрос Ajax представляет собой список ошибок проверки, которые клиент может отображать по мере необходимости.

Подробнее в этом ответе.

Другие вопросы по тегам