Python Flask 装饰器 捕获请求参数和返回值,并追加自定义参数(业务名称)

你可以使用 Flask 的装饰器在每个请求接口中追加业务模块名称。可以在 log_request_response 装饰器中添加一个新的参数,将业务模块名称作为参数传入。以下是修改后的代码示例:

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

app = Flask(__name__)

def log_request_response(module):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 记录请求信息
            request_data = {
                'module': module,
                '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 = {
                'module': module,
                'status_code': response.status_code,
                'body': response.json
            }
            print('Response:', response_data)

            return response
        return wrapper
    return decorator

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

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

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

在这个示例中,log_request_response 装饰器接受一个 module 参数,用于指定业务模块名称。你可以在调用 @log_request_response 时传入该参数,例如 @log_request_response('example_module')。然后在 wrapper 函数中,将该参数加入请求和响应信息中。

posted @ 2023-09-08 21:39  小小菜鸟04  阅读(394)  评论(0)    收藏  举报