【问题标题】:Flask-WTForms .validate_on_submit() never executesFlask-WTForms .validate_on_submit() 从不执行
【发布时间】:2023-03-30 16:25:02
【问题描述】:

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

您看到的额外类来自引导库,以防有人想知道。

【问题讨论】:

    标签: flask-wtforms wtforms


    【解决方案1】:

    您好,您可以通过为您添加一个 else if form.validate_on_submit(): 来找出问题所在并让它这样做

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

    这应该告诉你什么是不工作希望这有帮助,我还没有测试过,所以它可能有错别字

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 2023-03-15
      • 2012-05-30
      • 2013-12-08
      • 2013-09-14
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多