生产中使用Flask的静态文件

时间:2013-05-16 19:20:00

标签: static flask production-environment

通常,问题是如何在开发环境中提供静态文件,而在我的情况下却是相反的。所以我使用Apache和mod_wsgi部署了一个Flask应用程序,配置Apache在/ static url中提供我的静态文件。现在我不确定,这些文件是由Apache还是由Flask提供,因为flask默认情况下也使用相同的静态路径。

在模板中我使用url_for(“static”,filename =“style.css”)。它工作正常。但这是问题,因为我不知道什么是我的静态文件。当然,我可以肯定Apache正在服务,如果我改变每个模板以获得硬编码路径和不同于默认Flask的东西,但这听起来不是正确的解决方案。

总结一下我的问题:如何在Flask(模板)中使用url_for(静态),并确保Flask没有为我服务?

谢谢, Rapolas K。

2 个答案:

答案 0 :(得分:6)

  1. 设置另一个静态文件夹(您还需要在文件系统上创建空文件夹):

    app = Flask(__name__, static_url_path='static', static_folder='static_test')
    

    因此,如果你得到404,那么文件由另外一个apache服务。

  2. 添加测试文件夹并映射apache和静态文件夹。

    因此,如果您从测试文件夹获取内容,那么由apache起作用的文件烧瓶。

  3. 中断任何static个端点请求:

    @app.before_request
    def break_static():
        if request.endpoint == 'static':
            abort(404)
        return None
    

    class YourApp(Flask):
        def send_static_file(self, filename):
            abort(404)
    

    因此,如果你得到404,那么文件由flaks服务,否则为apache。

  4. 但是如果你真的不确定的话,你有足够的一次测试这个案例。如果apache配置不会改变,那么静态服务行为也不会改变。

答案 1 :(得分:0)

只要你有这个就可以确定:

if __name__ == '__main__':
    app.run()

app.run()调用实际上启动了本地开发服务器。在制作中,你将/永远不必打电话给这个,因此开发者无法提供任何服务。服务器,因为它永远不会启动。