繁体   English   中英

未在上传时检测到烧瓶文件

[英]Flask file not detecting on upload

我在此字段中创建了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是必需的,即使它在request.files中也是如此:

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

如何获取FileRequired()方法来检测文件?

request.form仅包含表单输入数据。 request.files包含文件上传数据。 您需要将两者的组合传递给表单。 由于您的表单继承自Flask-WTF的Form (现在称为FlaskForm ),因此如果您不向表单传递任何内容,它将自动处理此问题。

form = BrandForm()

if form.validate_on_submit():
    ...

如果没有Flask-WTF,请使用CombinedMultiDict合并数据并将其传递给表单。

from werkzeug.datastructures import CombinedMultiDict

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM