#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)
это должно рассказать вам, что не работает, надеюсь, это поможет, и я не проверял это, поэтому в нем могут быть опечатки