Flask wtform forms.validate_on_submit()始终为false

use*_*022 5 python-2.7 flask-wtforms

我在这里和其他一些地方看过其他类似的问题,但解决方案似乎没有帮我解决问题.尽管如此,我没有看到我所获得的这个简单代码与其他类似代码之间存在太大差异.特别是这一个Flask - wtforms:验证始终是假的

forms.validate_on_submit()总是假的,我看不出原因.我正在阅读Miguel Grinberg的Flask Web开发书,但我想改变一些东西以便了解更多信息.它在html模板中使用wtf.quick_form(form)时有效,但是如果我删除了quickform条目并放入表单字段,那么它就不起作用屏幕只是刷新并且它不会将Stranger更改为任何名称进入

HTML索引模板

 {% extends "base.html" %}
 {% import "bootstrap/wtf.html" as wtf %}

 {% block title %}Flasky{% endblock %}

 {% block page_content %}
 <div class="page-header">
     <h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>

 </div>
 <form action="" method='POST'>

  {{ form.name.label }} <br>
  {{ form.name }}
{{ form.submit }}
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

相关代码hello.py

from flask import Flask, render_template, request
from flask.ext.script import Manager
from flask.ext.bootstrap import Bootstrap
from flask.ext.moment import Moment
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, RadioField, TextField, validators
from wtforms.validators import Required
from wtforms.validators import DataRequired

app = Flask(__name__)



class NameForm(Form):
    name = StringField('What is your name?',validators=[Required()] )

submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
     name = None
     form = NameForm(request.form)  #From the docs I read I don't need 
                                    # request.form but it
                                    # doesn't work either with it or without it

     if form.validate() == True:
      name='True'  #never happens  is not validating or is always set to False for 
                       # some reason

     if form.validate_on_submit(): #isn't validating or working
          name = form.name.data  #'Stranger' will disappear from the html template and 
                            #replaced   with the name the user entered in the
                            # Stringfield 

          form.name.data = ''  #clear stringfield for next round

          return render_template('index.html',form=form, name=name)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)'
Run Code Online (Sandbox Code Playgroud)

什么是我不理解\缺少?谢谢

G

Ber*_*gwa 20

问题是wtf没有找到CSRF令牌作为表单数据的一部分.添加{{ form.hidden_tag() }}{{ form.csrf_token }}作为表单的顶部元素.