Flask-WTForms .validate_on_submit() 从不执行

Flask-WTForms .validate_on_submit() never executes

所以基本上我想要一个 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 %}

    <div align="center">
        Hi {{ current_user.name }}<br>
        <img align="center" src="{{ url_for('static', filename='profile_pics/'+current_user.profile_image) }}">
    </div>
    <div class="container">
        <form method="post">
            {{ form.hidden_tag() }}
            <div class="form-group">
                {{ form.email.label(class='form-group') }}
                {{ form.email(class='form-control') }}
            </div>

            <div class="form-group">
                {{ form.picture.label(class='form-group') }}
                {{ form.picture(class='form-control') }}
            </div>

            <div class="form-group">
                {{ form.submit() }}
            </div>
        </form>
    </div>

{% endblock %}

你看到的额外 类 来自 bootstrap 图书馆,以防有人想知道。

您好,您可以通过为您添加一个 else if form.validate_on_submit(): 并让它执行此操作来找出问题所在

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

这应该会告诉您什么不起作用希望这对您有所帮助,我还没有测试过所以它可能有拼写错误