如何在猎鹰应用中拦截静态路由?



我目前使用静态路由提供文件,如下所示:

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

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

您可以在路由之前添加中间件来处理每个请求。缺点是这将适用于所有传入请求,因此您可能需要先重新检查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/')

然而,后一种方法没有官方文档,因此理论上它可能在未来的版本中不通知地中断。只有当中间件方法由于某种原因不适合您的用例时,才使用此方法。

相关内容

  • 没有找到相关文章

最新更新