python - 通过 Flask 和 Nginx 提供静态文件?

标签 python nginx flask

我有一些通过 Flask 提供的静态文件。根据给定的请求,我运行一些处理和身份验证,然后提供文件。我一直在使用 Flask 的 send_from_directory 来做到这一点,但看起来它会缓存文件一段时间,这对我来说没有好处。我在 nginx 后面运行 Flask,因此我愿意通过 nginx 部分提供服务,但我需要在提供文件之前运行处理/身份验证。

所以,主要问题是,假设我需要在服务之前在 Flask 中进行处理/身份验证,如何使用 Flask 和 nginx 提供未缓存的静态文件?

注意:我已经看到详细说明如何通过 nginx 提供文件的答案,但这对我来说没有好处,因为我必须在提供之前在 Flask 中进行处理。

最佳答案

默认情况下,Flask 会缓存您使用 send_from_directory 发送的文件 12 小时。您至少有几个选择来克服这种行为。

您可以将配置值SEND_FILE_MAX_AGE_DEFAULT更改为小于 1 或 0 秒的值,这将影响整个应用程序使用的默认值。或者,您可以将其直接传递给您不需要缓存的 send_from_directory 调用,因为使用关键字 cache_timeout

例如,

 @app.route('/uploads/<path:filename>')
 def download_file(filename):
     return send_from_directory(app.config['UPLOAD_FOLDER'],
                                filename, cache_timeout = 0)

或者您可以继承 Flask 并覆盖 get_send_file_max_age方法。

关于python - 通过 Flask 和 Nginx 提供静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655022/

相关文章:

带有任意项目的列表的Python字符串格式化

node.js - Chrome net::ERR_HTTP2_PROTOCOL_ERROR 200 重新连接后

javascript - 我正在尝试使用 nginx 反向代理方法托管一个网站,我正在运行两个 Node.js 应用程序

javascript - 将变量从js代码传递到db中的flask或类似的东西

python - 将 "external' 类模型与 flask sqlalchemy 相关联

python - 逐行比较两个大文件

python - 支持sqlite和sqlite3

python - 用字符串 "None"替换 Scrapy.css 返回的空/空白数据

ssl - 在 Nginx 和 Daphne 中使用 WebSocket Secure

python - 在 python 中使用 sqlite3 数据库作为 Flaskr,无需 ORM