WTF form.validate_on_submit()不起作用

Raf*_*afa 1 flask wtforms flask-wtforms

我有以下代码,我正在提交表格.当我点击提交按钮时,我的表单验证打印出来False.我已经检查并确保我包含了不同帖子中的所有内容,但我无法让它验证.有什么我做错了吗?

@app.route('/index.html', methods=['GET', 'POST'])
    def index():   
            user = {'nickname': 'Rafa'}
            form = FilterForm()
            print("about to validate", file=sys.stderr)
            if form.validate_on_submit():
                    print("validated", file=sys.stderr)
                    filters_array = form.filter.split(',')
                    streaming(filters_array)
                    response = {"response", "yes"}
                    redirect("/authenticate")



            return render_template('index.html',
                    title="Home",
                    user=user,
                    form=form)

    class FilterForm(Form):
            filter = StringField('filter', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

这是我的Jinja文件

    {% block content %}    
      <h1> I have successfully navigated to the title pagee </h1> 
      <h1> Hello, {{user.nickname}}!</h1> 
      <h1> Get Tweets </h1> 
      <p> Please enter a comma delimited list of filters</p>   
      <form action="" method="post" name="login"> 
        {{form.filter(size=80)}} 
      <input type="submit" value="Get Tweets!"> 
      </form> 
    {% endblock %}
Run Code Online (Sandbox Code Playgroud)

wgw*_*gwz 8

FilterForm不应该缩进到与...相同的水平def index().更重要的是csrf_token,您的表单中没有.这将阻止它验证.

将其添加到您的表单:

{{ form.csrf_token }}
Run Code Online (Sandbox Code Playgroud)

最后,在使用wtforms进行验证时,会在表单对象中填充错误.所以在if validate尝试打印之后form.errors,你会发现到底出了什么问题.

  • 请参阅:https://flask-wtf.readthedocs.org/en/latest/quickstart.html#creating-forms。再次打印`form.errors`。每个表单都需要一个 `csrf_token`。 (2认同)
  • 我通过在表单标签下添加{{form.hidden_​​tag()}}来解决此问题。 (2认同)

小智 6

另一个要求是,当您使用 时form.validate_on_submit,您必须确保您已使用表单模型的所有字段。