【问题标题】:Flask optional upload file [duplicate]Flask 可选上传文件 [重复]
【发布时间】:2019-02-05 00:20:09
【问题描述】:

我有一个包含多个文本字段和一个文件字段的表单:

class PictureForm(Form):

    title = StringField(u'Title',validators=[Required()])
    description = TextAreaField(u'Description')
    gallery = QuerySelectField(u'Which 
        gallery?',query_factory=all_galleries,validators=[Required()])
    imagekind = StringField(u'Imagekind URL')
    pic = FileField('Image upload')

    submit = SubmitField(u'Upload/edit picture')

我想要的是一个编辑图像的视图,它可能接受也可能不接受新图像。如果 request.files 中有文件,我想使用它并替换旧图像。但是,如果没有文件,我希望视图只更新元数据(名称、画廊、imagekind 链接等),同时保留旧的图像文件。

视图如下所示:

@main.route('/picture/edit/<id>', methods = ['GET', 'POST'])
@login_required
def edit_picture(id):

    # old picture
    picture = Picture.query.get_or_404(id)

    # form data - old picture
    form = PictureForm(obj=picture)

    if form.validate_on_submit():

        #  update picture data
        picture.title = form.title.data
        picture.description = form.description.data
        picture.gallery = form.gallery.data
        picture.imagekind = form.imagekind.data

        # new image if uploaded
        image = request.files['pic']
        filename = ''

        if image:

            # replace old file on disk with new image...
            # some PIL processing

            # new file names

        else:

            msg = u'No new image, just updated the metadata'
            flash(msg,'warning')

        db.session.add(picture)
        db.session.commit()

        return redirect(url_for('main.admin_page'))     

    return render_template('main/new_picture.html', form = form, edit=True, 
        picture = picture)

当给表单一个文件/图片时,一切都会正常运行。但是,当我尝试在表单中没有图像或文件时,我收到 400 Bad request?有任何想法吗?所有字段都有正确的 ID 和名称...

【问题讨论】:

    标签: flask flask-wtforms


    【解决方案1】:

    愚蠢的错误:我不得不检查:

    if 'pic' in request.files:
    

    然后从那里拿走。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2020-08-01
      • 2018-05-20
      • 2011-08-12
      • 2021-10-14
      • 2011-03-17
      相关资源
      最近更新 更多