2017-10-04 4 views
0

Ich möchte eine CSV-Datei auf Flask mit Flask-WTF FileField hochladen können, aber die validate_on_submit nicht passieren können.Flask-WTF FileField scheitert an validate_on_submit

Das ist meine Ansicht.

@main.route('/upload', methods=['GET', 'POST']) 
def upload_products(): 

    form = UploadForm() 
    print (request.method) 
    print (form.validate_on_submit()) 
    print (form.csv.data) 
    if form.validate_on_submit(): 
     print ('valid on submit') 
     f = form.csv.data 
     print (f) 
     return redirect(url_for('upload_products')) 
    return render_template('upload.html', form=form) 

das ist meine Form

class UploadForm(FlaskForm): 
    csv = FileField("") 

das ist mein html Datei.

<div class="container"> 
    <h1 class="my-4">Hello! Upload files here!</h1> 
</div> 
<div class="container" > 
    <form action="{{ url_for('main.upload_products') }}" method="post" enctype="multipart/form-data"> 
     {{form.csv}} 
     <input type="submit" value="Submit"> 
    </form> 
</div> 

auf validate_on_submit, erhalte ich immer einen False Wert. Ich druckte auch form.csv.data und das ist das Ergebnis, das ich bekam:

<FileStorage: '12347.csv' ('application/vnd.ms-excel')> 

Warum ist es validate_on_submit Fehler auf? Habe ich etwas verpasst?

+1

Ich denke, es ist das CSRF-Problem. Kannst du die 'form.errors' ausdrucken? Es sollte "CSRF-Token fehlt" sein. Wenn ja, überprüfen Sie diese Antwort: https://stackoverflow.com/a/21501593/2644759 –

+0

Sie haben Recht, Fehler ist 'Der CSRF-Token fehlt – essramos

Antwort

0

Dies wurde behoben, indem auf meiner Vorlage {{form.hidden_tag()}} hinzugefügt wurde.

<div class="container"> 
    <h1 class="my-4">Hello! Upload files here!</h1> 
</div> 
<div class="container" > 
    <form action="{{ url_for('main.upload_products') }}" method="post" enctype="multipart/form-data"> 
     {{form.hidden_tag()}} 
     {{form.csv}} 
     <input type="submit" value="Submit"> 
    </form> 
</div> 
Verwandte Themen