生产中使用Flask的静态文件

Rap*_* K. 4 static production-environment flask

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

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

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

谢谢,Rapolas K.

tbi*_*icr 6

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

    app = Flask(__name__, static_url_path='static', static_folder='static_test')
    
    Run Code Online (Sandbox Code Playgroud)

    因此,如果你得到404然后文件服务由其他apache服务.

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

    因此,如果您从测试文件夹中获取内容,那么由apache提供的文件就会烧掉.

  3. 打破任何static端点请求:

    @app.before_request
    def break_static():
        if request.endpoint == 'static':
            abort(404)
        return None
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    class YourApp(Flask):
        def send_static_file(self, filename):
            abort(404)
    
    Run Code Online (Sandbox Code Playgroud)

    因此,如果你得到404然后由flaks服务的文件,否则apache.

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