【问题标题】:Flask file not detecting on uploadFlask 文件在上传时未检测到
【发布时间】:2016-10-30 23:06:17
【问题描述】:

我用这个字段做了一个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() 方法来检测文件?

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    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():
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2016-07-27
      • 2018-12-11
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      相关资源
      最近更新 更多