【问题标题】:How can I intercept static routes in a falcon app?如何拦截猎鹰应用程序中的静态路由?
【发布时间】:2021-12-07 13:21:44
【问题描述】:

我目前正在使用这样的静态路由来提供文件:

application.add_static_route('/artifacts/', '/artifacts/')

如何将在每次 GET 之前调用的函数添加到此路由及其下方的任何路由?当任何用户尝试从该路径获取工件时,我想向我们的 matomo(分析)服务器发送一些数据。

【问题讨论】:

    标签: python matomo falconframework


    【解决方案1】:

    您可以在路由前添加middleware 来处理每个请求。缺点是这将适用于所有传入请求,因此您可能需要先重新检查req.path

    class AnalyticsMiddleware:
        def process_request(self, req, resp):
            if req.path.startswith('/artifacts/'):
                print(f'Do something with {req.uri}...')
    
    
    application = falcon.App(middleware=[AnalyticsMiddleware(), ...])
    

    或者,您可以继承 StaticRoute 并将其添加为接收器:

    import falcon
    import falcon.routing.static
    
    
    class MyStaticRoute(falcon.routing.static.StaticRoute):
        def __call__(self, req, resp):
            print(f'Do something with {req.uri}...')
    
            super().__call__(req, resp)
    
    
    # ...
    
    static = MyStaticRoute('/artifacts/', '/artifacts/')
    application.add_sink(static, '/artifacts/')
    

    但是,后一种方法没有正式记录,因此理论上它可能会在未来的版本中中断,恕不另行通知。仅当中间件方法由于某种原因不能满足您的用例时才使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 2011-06-27
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多