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

时间:2015-06-04 22:06:53

标签: python nginx flask

我有一些我通过Flask服务的静态文件。在给定的请求上,我运行一些处理和身份验证,然后提供该文件。我一直在使用Flask的send_from_directory这样做,但看起来有点缓存文件,这对我没有好处。我让Flask在nginx后面运行,所以我愿意通过nginx部分服务,但我需要在文件获得服务之前运行处理/身份验证。

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

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

1 个答案:

答案 0 :(得分:4)

默认情况下,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方法。