Хранить загруженный файл временно при возникновении ошибок формы

У меня есть форма с FileField и другие поля:

from flask_wtf.file import FileField

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

Как я могу "сохранить" загрузку файлов через несколько запросов? Например, я прикрепляю файл к полю загрузки файла и записываю некоторый текст в другое поле. После того, как я нажму на кнопку отправить, текст не будет проверен, поэтому я снова отобразлю форму для просмотра данных, но файл исчез. Как я могу улучшить форму, чтобы пользователю больше не приходилось загружать файл?

1 ответ

Самый простой способ - сохранить файл при первой загрузке, а затем ссылаться на него по идентификатору:

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)
Другие вопросы по тегам