Предпочтительным методом обслуживать статические файлы, является настройка и использование NGINX или другого веб-сервера, так как они смогут сделать это более эффективно, чем Flask.
Что бы открывать статические файлы при помощи самого Flask, необходимо использовать метод flask.send_from_directory()
, что может быть довольно удобно в некоторых ситуациях:
from flask import Flask, request, send_from_directory # установка корневого каталога проекта в качестве # статической папки, можно установить другой. app = Flask(__name__, static_url_path='') @app.route('/js/<path:path>') def send_js(path): return send_from_directory('js', path) if __name__ == "__main__": app.run()
В качестве альтернативы можно использовать flask.send_file()
или app.send_static_file
, но это крайне не рекомендуется, так как это может привести к угрозам безопасности с путями, предоставленными пользователем. Метод flask.send_from_directory
был разработан для контроля этих рисков.
Смотрим реальный пример для отдачи файлов favicon.svg
, robots.txt
и sitemap.xml
, которые лежат в директории static
:
# функция, которая обрабатывает отдачу # статики из корневой директории сайта @app.route('/favicon.svg') @app.route('/sitemap.xml') @app.route('/robots.txt') def static_root(): return send_from_directory(app.static_folder, request.path[1:])