2017-10-04 14 views
0

Flask-WTF FileFieldを使用してFlaskにCSVファイルをアップロードできますが、validate_on_submitを渡すことはできません。Flask-WTF FileFieldはvalidate_on_submitで失敗します

これは私の見解です。

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

これは、これは私のhtmlファイルである私のフォーム

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

です。 validate_on_submit

<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> 

、私はいつもFalse値を受け付けております。 は私もform.csv.dataをプリントアウトし、これは私が得た結果である:

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

は、なぜそれがvalidate_on_submitに失敗していますか?私は何か見落としてますか?

+1

私はCSRFの問題だと思います。あなたは 'form.errors'を印刷できますか?それは "CSRFトークンがない"と言うべきです。もしそうなら、この答えをチェックしてください:https://stackoverflow.com/a/21501593/2644759 –

+0

あなたは正しいです、エラーは 'CSRFトークンがありません.' – essramos

答えて

0

私のテンプレートに{{form.hidden_tag()}}を追加してこれを修正しました。

<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> 
関連する問題