Flask wtformforms.validate_on_submit() всегда имеет значение false

Я просмотрел другие подобные проблемы здесь и в нескольких других местах, но решения, похоже, не помогают с моей проблемой. Несмотря на это, я не вижу большой разницы между этим простым кодом, который у меня есть, и другим подобным кодом. Особенно этот Flask - wtforms: проверка всегда ложна

form.validate_on_submit() всегда ложно, и я не понимаю, почему. Я просматриваю книгу Мигеля Гринберга по веб-разработке Flask, но я хотел изменить некоторые вещи, чтобы узнать больше. Это работает при использовании wtf.quick_form(form) в шаблоне html, но если я удалю запись 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 %}

соответствующий код 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)'

что я не понимаю\не понимаю? Спасибо

g


person user3743022    schedule 15.06.2014    source источник
comment
возможный дубликат - stackoverflow.com/questions/20837209 /   -  person nsfyn55    schedule 17.06.2014


Ответы (2)


Проблема в том, что wtf не находит токены CSRF как часть данных вашей формы. Добавьте {{ form.hidden_tag() }} или {{ form.csrf_token }} в качестве верхнего элемента формы.

person Bernard Ojengwa    schedule 08.10.2014
comment
Я изо всех сил пытался выяснить, что происходит, и вы спасли мой день. Спасибо - person thanos.a; 14.09.2020

Просто небольшое напоминание для тех, кто использует форму шаблона начальной загрузки, как я.

Не забудьте также добавить атрибут «имя» во входной тег. Например,

<label>Your name</label>
<input name = 'name' required>  

<label>Your email</label>
<input name = 'email' required> 
person X.C.    schedule 21.08.2017