2016-06-28 50 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> 

要進行調試,在我看來,我把:

@expose('/', methods=['GET', 'POST']) 
def index(self): 
    form = BrandForm(request.form) 
    print(form.validate()) 
    print(form.errors) 
    print("request.files") 
    print(request.files) 

而在控制檯中,我得到的消息是logo_image是必需的,即使它我s there in request.files:

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),因此如果您不向表單傳遞任何內容,它將自動處理。

form = BrandForm() 

if form.validate_on_submit(): 
    ... 

沒有燒瓶WTF,使用CombinedMultiDict到數據相結合,並傳遞給形式。

from werkzeug.datastructures import CombinedMultiDict 

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

if request.method == 'POST' and form.validate(): 
    ...