【发布时间】:2021-10-04 15:35:03
【问题描述】:
我想在 Flask 中创建一个中间件函数,用于记录来自请求和响应的详细信息。中间件应该在创建响应之后但在它被发回之前运行。我要登录:
- 请求的 HTTP 方法(
GET、POST或PUT) - 请求端点
- 响应 HTTP 状态代码,包括 500 个响应。因此,如果在视图函数中引发异常,我想在 Flask 内部发送它之前记录生成的 500 响应。
我发现的一些选项(对我来说不太适用):
-
before_request和after_request装饰器。如果我可以访问after_request中的请求数据,我的问题仍然无法解决,因为根据文档
如果函数引发异常,则不会调用任何剩余的
after_request函数。
-
Deferred Request Callbacks - 此页面上描述了一个
after_this_request装饰器,它装饰任意函数(在当前视图函数中定义)并将其注册为在当前请求之后运行。由于任意函数可以包含来自请求和响应的信息,它部分解决了我的问题。问题是我必须在每个视图函数中添加这样一个装饰函数;我非常想避免这种情况。
@app.route('/') def index(): @after_this_request def add_header(response): response.headers['X-Foo'] = 'Parachute' return response return 'Hello World!'
有什么建议吗?
【问题讨论】: