python flask有像Spring AOP一样 捕获记录操作过程请求和返回

发布时间 2023-09-08 16:13:55作者: 小小菜鸟04

在 Python Flask 中,你可以使用装饰器(decorators)或中间件(middlewares)来实现类似 Spring AOP 的日志记录功能,以捕获和记录操作过程的请求和返回。

一种常见的方法是使用装饰器来包装路由处理函数,在函数执行前后记录相关信息:

```python
from functools import wraps
from flask import Flask, request, jsonify

app = Flask(__name__)

def log_request_response(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 记录请求信息
request_data = {
'method': request.method,
'path': request.path,
'headers': dict(request.headers),
'body': request.get_json() or request.form.to_dict()
}
print('Request:', request_data)

# 执行路由处理函数
response = func(*args, **kwargs)

# 记录响应信息
response_data = {
'status_code': response.status_code,
'body': response.json
}
print('Response:', response_data)

return response
return wrapper

@app.route('/example', methods=['POST'])
@log_request_response
def example():
# 处理请求
data = request.json
# ...

# 返回响应
return jsonify({'message': 'success'})

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

在这个例子中,`log_request_response` 装饰器被应用到 `/example` 路由的处理函数上。在每次请求到达该路由时,装饰器将先记录请求信息,然后执行路由处理函数,最后记录响应信息。

通过在适当的地方添加类似的装饰器,你可以捕获和记录其他路由的请求和返回。

注意,上述例子中只是简单地将请求和响应信息打印到控制台,你可以根据实际需求将这些信息记录到日志文件或其他存储中。