WTF form.validate_on_submit()不起作用

时间:2016-04-06 01:42:54

标签: 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()])

这是我的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 %}

3 个答案:

答案 0 :(得分:6)

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

将此添加到您的表单:

{{ form.csrf_token }}

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我在您的代码中发现了一些语法错误,可能会导致您遇到的问题。

首先,装饰器中的问题 app.route

app.route('/index')

第二,在你的html文件中:

form action='/index'