2016-04-06 3 views
1

Ich habe den folgenden Code und ich reiche ein Formular ein. Wenn ich auf die Senden-Schaltfläche klicke, druckt meine Formularvalidierung False aus. Ich habe überprüft und sichergestellt, dass ich alles aus verschiedenen Beiträgen einbeziehe, aber ich kann es nicht bestätigen. Gibt es irgendetwas, was ich falsch mache?WTF form.validate_on_submit() funktioniert nicht

@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()]) 

Hier ist meine Jinja Datei

{% 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 %} 

Antwort

3

FilterForm sollte nicht auf dem gleichen Niveau wie def index() eingerückt werden. Noch wichtiger, Sie haben kein csrf_token in Ihrem Formular. Was verhindert, dass es validiert wird.

Fügen Sie dieses Formular:

{{ form.csrf_token }} 

Schließlich, wenn sie mit wtforms Validierung werden die Fehler in Form Objekt gefüllt. Versuchen Sie nach einem if validate Drucken form.errors und Sie werden genau herausfinden, was falsch ist.

+0

ich meine csrf Token als Teil einer Konfigurationsdatei haben, die Ich habe. Ist das genug? – Rafa

+0

Siehe: https://flask-wtf.readthedocs.org/en/latest/quickstart.html#creating-forms. Drucken Sie 'form.errors' erneut. Jedes Formular benötigt ein 'csrf_token'. – wgwz

+0

Ich habe das gelöst, indem ich {{form.hidden_tag()}} unter meinem Formular-Tag hinzugefügt habe. –

1

Ich habe einen Syntaxfehler in Ihrem Code gefunden, der möglicherweise das Problem verursacht, das Sie haben.

zuerst, das Problem in Ihrem Dekorateur app.route:

app.route('/index') 

Sekunde, in der HTML-Datei:

form action='/index' 
Verwandte Themen