WTForms validate_on_submit не будет выполняться (даже с csrf_token) - PullRequest
0 голосов
/ 18 июня 2020

Я использую Flask -WTF, и вот фрагмент моей формы. Маршруты входа и регистрации предваряются url_prefix='/auth' в пользовательском Blueprint.

class RegisterForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

Вот путь регистрации.

@users.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()

    print("Before form validate")
    print(form.errors)

    if form.validate_on_submit():
        print("After form validate")
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('main.home'))

    return render_template('auth/register.html', title='Register', form=form)

Это - это минимальное представление шаблона (с включенным csrf_token). Я также пробовал .hidden_tag() в шаблоне, но результат похож.

<form method="POST" action="">
  {{ form.hidden_tag() }}

  <span class="bmd-form-group">
    <div class="input-group">
        <div class="input-group-prepend">
          <span class="input-group-text">
            <i class="material-icons">account_circle</i>
          </span>
        </div>
        {{ form.username(class="form-control form-control-lg" ~ (" is-invalid" if form.username.errors else ""), placeholder="Username...") }}
          {% if form.username.errors %}
            <div class="invalid-feedback">
            {% for error in form.username.errors %}
              <span>{{ error }}</span>
            {% endfor %}
            </div>
          {% endif %}
    </div>
  </span>

  <span class="bmd-form-group">
    <div class="input-group">
        <div class="input-group-prepend">
          <span class="input-group-text">
            <i class="material-icons">email</i>
          </span>
        </div>
        {{ form.email(class="form-control form-control-lg" ~ (" is-invalid" if form.email.errors else ""), placeholder="Email...") }}
          {% if form.email.errors %}
            <div class="invalid-feedback">
            {% for error in form.email.errors %}
              <span>{{ error }}</span>
            {% endfor %}
            </div>
          {% endif %}
    </div>
  </span>

   ...........

</form>

Как вы видите из моего маршрута регистрации, я также проверил возможные ошибки в форме. Это мой вывод на консоль после регистрационного теста.

Before form validate
{}
127.0.0.1 - - [18/Jun/2020 21:02:28] "GET /auth/register?csrf_token=IjFlZGRkNmQ5YzkwZmE2YWJiYzY5NWMxNTAyZTMzN2UxODNmZjgzOTEi.XuupQg.4_2FGVqnp-2lq2vriQbAkx1Qz3Q&username=test&email=test%40test.com&password=testing&confirm_password=testing&submit=Sign+Up HTTP/1.1" 200 -
127.0.0.1 - - [18/Jun/2020 21:02:29] "GET /favicon.ico HTTP/1.1" 404 -

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...