Приложение Flask WTForms создает файл для загрузки. Пользователи получают чужой файл (то же имя). Как исправить?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Flask WTForms создает файл для загрузки. Пользователи получают чужой файл (то же имя). Как исправить?

Сообщение Anonymous »


Мое приложение создает файл на сервере на основе ввода в WTForms. Имя файла никогда не меняется. Когда приходит новый пользователь, заполняет форму, и старый файл перезаписывается. Проблема заключается в том, что два пользователя одновременно используют приложение и получают не тот файл (время между созданием файла и его загрузкой иногда может составлять 1 или 2 минуты). Я хочу избежать этой проблемы. Вот мой код и структура папок:
[*]
FlaskApp

модули

FileCreate.py Формы.py [*]шаблоны

InputPage.html [*]WebApp.py

WebApp.py:

из фляги импорта Flask, render_template, send_file, request из модулей импорта Forms, FileCreate приложение = Колба(__name__) @app.route("/index", методы = ["GET", "POST"]) защита vFileCreate(): форма = Формы.clInputFromUser() если form.validate_on_submit() и request.method == "POST": списокданных = form.stringdata.data пользовательские данные = FileCreate.clFileCreate (список данных, форма) пользовательские данные.file_save() return render_template("InputPage.html", form=form, userdata=userdata) еще: вернуть render_template("InputPage.html") если __name__ == '__main__': app.run(отладка=Истина) @app.route("/download_file") защита vDownloadFile(): ПУТЬ = "UserReport.txt" вернуть send_file(PATH, as_attachment=True, download_name="Sample_Report.txt") Forms.py:

из flask_wtf импорта FlaskForm класс clInputFromUser (FlaskForm): stringdata = TextAreaField("Вставьте сюда столбец данных:") submit = SubmitField("Анализ данных и создание файла") FileCreate.py:

класс clFileCreate: def __init__(self, listdata, form): self.formdata = форма self.data = formdata.stringdata.data fp = open('UserReport.txt', 'w') fp.write(self.data) fp.close() InputPage.html:

Страница формы {{ form.hidden_tag() }} {{ form.stringdata.label }}
{{ form.stringdata(size=32) }} {{ form.submit() }} Загрузить отчет Какие варианты я могу использовать, чтобы убедиться, что пользователю, который только что заполнил форму, был отправлен правильный файл? Из-за ограничений нет базы данных, нет заданий CRON на сервере по очистке файлов, нет идентификации пользователя.

Идея 1. Я мог бы перезапустить класс непосредственно перед загрузкой, но для этого необходимо повторно отправить форму, и я не знаю, как это сделать.

Идея 2: я мог бы передать файл в потоковом режиме, но не знаю, как переместить переменную потока в функцию загрузки в маршруте download_file, поскольку это две разные функции.

Идея 3: я мог бы идентифицировать сеанс (я не знаю, возможно ли это) и гарантировать, что пользователь получит правильный файл, сделав имя файла уникальным для сеанса, но тогда я этого не делаю. знать, как удалить файл после загрузки или передать уникальное имя файла в функцию download_file из класса. (см. ограничения).

Есть идеи?

ПРИМЕЧАНИЕ. Этот код представляет собой образец, демонстрирующий структуру. Я не проверял это, поскольку вопрос больше касается концепции подхода к проблеме, а не конкретного кода.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»