2016-09-25 3 views
0

Я запускаю приложение Flask, в котором пользователь делает запрос GET, введя что-то в текстовое поле. Бэкэнд-код, который получает запрос GET, выполняет некоторые вычисления в параметре запроса и отправляет обратно 2 или 3 вновь созданных json-файла, созданных в результате вычислений. Затем пользователь может просматривать некоторые графики, созданные из файлов JSON, в зависимости от выбранной фильтрации пользователем. Моя проблема в том, что я хочу, чтобы эти файлы json хранились в папке с именем data (и они накапливаются с течением времени по разным причинам и для более быстрого ответа). Моя структура приложения примерно:Выполнение динамически сгенерированного файла в Flask

/data 
/static 
/templates 
/python src files 

Теперь я могу получить HTML-код, чтобы получить файлы в статическом, но он не работает для файлов в папке данных. Как я могу позволить Flask знать, что разрешен запрос GET в папке с данными?

ответ

1

Вы можете использовать send_from_directory() для обслуживания файлов от /data.

@app.route('/data/<path:filepath>') 
def data(filepath): 
    return send_from_directory('data', filepath) 
+0

Спасибо, я попробую это, возможно ли, чтобы имя файла находилось под другим уровнем каталогов? Например, для /data/dir1/f1.json или /data/dir2/f2.json и т. Д. – user3079275

+0

Я изменил свой ответ, чтобы разрешить подкаталоги. Кроме того, ранее была небольшая ошибка: это должны быть «данные», а не «/ данные» для пути к каталогу. – xli

+0

Спасибо, что попробую, и если это сработает, я приму свой ответ. Мне понадобится несколько часов. большое спасибо – user3079275

0

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

+0

Я не понимаю функцию действия термина, это код внешнего интерфейса, который запрашивает файлы JSON? Код html не знает имена файлов JSON, которые ему нужно будет анализировать, потому что это зависит от результата вычисления, выполняемого кодом. Когда бэкэнд отправляет ответ обратно с именами файлов JSON, html-код может затем фильтровать их в зависимости от пользовательских взаимодействий. – user3079275