Flask - wtforms: Validation always false Flask - wtforms: Validation always false flask flask

Flask - wtforms: Validation always false


I always fail the form.validate_on_submit() when I am testing the login form following the demo code in Miguel Grinberg's book "Flask Web Development". So I think I should find a way to debug.

The debug approach I am taking is adding the code below to the app/auth/views.py:

flash(form.errors)

Then it shows me the culprit when I run to the login page:

errors={'csrf_token': ['CSRF token missing']}

So I recommend to use form.errors message to debug.


You have to initialize the form instance with values from the request:

from flask import request@app.route('/contact', methods=['GET','POST'])def contact():    form = ContactForm(request.form)    if request.method == "POST" and form.validate():        # do something with form        # and probably return a redirect    return render_template("contact.html", form=form)

Here's a better tutorial than the one you link in your question: http://flask.pocoo.org/docs/patterns/wtforms/.

Have a look at the template rendering code in the tutorial, make sure you render the form field errors. If the form is posted but does not validate the code will fall through to render_template with the form instance containing field validation errors (again, see the tutorial and WTForms documentation for details).


Just encountered the issue, and the solution was to add hidden_tag right under the form in the template:

...<form action="{{ url_for('contact') }}" method=post>{{ form.hidden_tag() }}...