Хранить загруженный файл временно при возникновении ошибок формы
У меня есть форма с 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)