2016-06-28 11 views
1

に検出していないファイルを、私はこの分野でflask_wtfフォームを作った:フラスコをアップロード

logo_image = FileField('logo_image', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Images only!')])

私のフォームは次のようになります。デバッグのために

<form action="" method="POST" name="app_branding" enctype="multipart/form-data"> 
    {{ form.csrf_token }} 
    {{ form.brand.label }} {{ form.brand }} 
    {{ form.logo_image.label }} {{ form.logo_image }} 
    {{ form.title_text.label }} {{ form.title_text }} 
    {{ form.first_paragraph.label }} {{ form.first_paragraph }} 
    {{ form.faq.label }} {{ form.faq }} 
    {{ form.privacy_policy.label }} {{ form.privacy_policy }} 
    {{ form.success_message.label }} {{ form.success_message }} 
    {{ form.submit.label }} {{ form.submit }} 
</form> 

、私の見解では、私が入れました:

コンソールでは、ロゴ画像が必要なメッセージが表示されます。ファイルが見つかりました。ファイル:

False 
{'logo_image': ['This field is required.']} 
request.files 
ImmutableMultiDict([('logo_image', <FileStorage: u'20140725_095232.jpg' ('image/jpeg')>)]) 

ファイルを検出するためにFileRequired()メソッドを取得するにはどうすればよいですか?

答えて

1

request.formにはフォーム入力データのみが含まれます。 request.filesにはファイルアップロードデータが含まれています。両方のフォームの組み合わせをフォームに渡す必要があります。あなたのフォームはFlask-WTFのForm(現在はFlaskFormと呼ばれています)から継承しているので、フォームに何も渡さなければ自動的にこれを処理します。フラスコ-WTFなし

form = BrandForm() 

if form.validate_on_submit(): 
    ... 

、データを結合して、フォームにそれを渡すためにCombinedMultiDictを使用しています。

from werkzeug.datastructures import CombinedMultiDict 

form = BrandForm(CombinedMultiDict((request.files, request.form))) 

if request.method == 'POST' and form.validate(): 
    ... 
関連する問題