Колба-WTForms .validate_on_submit() никогда не выполняется

#flask-wtforms #wtforms

Вопрос:

Поэтому в основном я хочу иметь форму Updateform (), которая позволяет пользователям обновлять данные своей учетной записи. Все мои другие формы (регистрация и т.д.) Работают отлично, Но эта конкретная форма никогда не проверяется при отправке. Следовательно, когда я нажимаю кнопку «Отправить», страница просто обновляется, но код .validate_on_submit() не выполняется.

Я просмотрел форумы, и я обнаружил, что общая проблема заключается в .Токен CSRF отсутствует, но я использую form.hidden_tag (), который я прочитал, должен отлично работать. Так что, похоже, моя проблема уникальна.

Я часами искал на форумах, но не нашел решения.

Вот мой код формы:

 class Updateform(FlaskForm):   email = StringField('Email:', validators=[DataRequired(), Email()])  picture = FileField('Update Profile Picture:', validators=[FileAllowed(['jpg', 'png'])])  submit = SubmitField("Update")    def validate_email(self, email):  if email.data != User.email:  if User.query.filter_by(email=email.data).first():  raise ValidationError('Email has already been registered')  

Вот маршрут:

 @users.route('/account', methods=['GET', 'POST']) @login_required def account():  form = Updateform()  print("hello")   if form.validate_on_submit():  print(form)  print("YES!!!")  name = current_user.name  pic = add_profile_pic(form.picture.data, name)  current_user.profile_image = pic   current_user.email = form.email.data  db.session.commit()  flash("Account Updated")   # elif request.method == "GET":  # form.email = current_user.email   profile_image = url_for('static', filename='profile_pics/' current_user.profile_image)  return render_template('account.html', profile_image=profile_image, form=form)  

А вот и html-код:

 {% extends "base.html" %} {% block content %}   lt;div align="center"gt;  Hi {{ current_user.name }}lt;brgt;  lt;img align="center" src="{{ url_for('static', filename='profile_pics/' current_user.profile_image) }}"gt;  lt;/divgt;  lt;div class="container"gt;  lt;form method="post"gt;  {{ form.hidden_tag() }}  lt;div class="form-group"gt;  {{ form.email.label(class='form-group') }}  {{ form.email(class='form-control') }}  lt;/divgt;   lt;div class="form-group"gt;  {{ form.picture.label(class='form-group') }}  {{ form.picture(class='form-control') }}  lt;/divgt;   lt;div class="form-group"gt;  {{ form.submit() }}  lt;/divgt;  lt;/formgt;  lt;/divgt;  {% endblock %}  

Дополнительные классы, которые вы видите, взяты из библиотеки начальной загрузки, если кому-то интересно.

Ответ №1:

Здравствуйте, вы могли бы узнать, в чем проблема, добавив еще для вас if form.validate_on_submit(): , и сделать это

 for error in form.email.errors:  print(error) for error in form.picture.errors:  print(error)  

это должно рассказать вам, что не работает, надеюсь, это поможет, и я не проверял это, поэтому в нем могут быть опечатки