当存在表单错误时,临时存储上传的文件

时间:2014-12-17 15:09:55

标签: python flask wtforms flask-wtforms

我的表单中包含FileField和其他字段:

from flask_wtf.file import FileField

class FooForm(Form):
    file = FileField()
    #...

我怎能"坚持"文件通过多个请求上传?例如,我将文件附加到文件上载字段并将一些文本写入另一个字段。单击“提交”后,文本无法验证,因此我再次显示表单以查看数据,但文件现已消失。如何改进表单以便用户不必再次上传文件?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在首次加载时存储文件,然后在ID之后通过ID引用它:

class FooForm(Form):
    file = FileField()
    file_id = HiddenField()

然后在你的处理程序中:

if form.file_id.data:
    # remove any validators from form.file
    form.file.validators = []

if form.validate():
    possible_file_stream = request.files.get(form.file.name)
    file_data = get_file(possible_file_stream, form.file_id.data)
    # Do things with file data
    return redirect('/somewhere/else')
elif form.file.data:
    file_data = request.files[form.file.name]
    form.file_id.data = save_file(file_data)

# Optionally, if the form should not display the file input
# once one has been uploaded
# del form.file
return render_template("form.html", form=form)