python - 如何使用装饰器访问请求和响应?
问题描述
我想编写一个自定义装饰器来从端点获取指标,有没有办法让我访问请求以及来自装饰器的响应?如果不是,我该怎么做。
我想查看请求,以便稍后将其记录下来进行分析,然后我需要查看响应以确定它是什么类型的响应。下面是我的代码。这个想法是我将能够进入内部调用的函数来获取请求。
代码:
def metric(func):
def inner(*args, **kwargs):
print("*" * 30)
start = time.process_time()
func(*args, **kwargs)
latency = start - time.process_time()
print(func)
print("*" * 30)
print(latency)
return inner
@metric
@app.route('/test', methods=['GET', 'POST'])
def printer():
req = request.get_json()
return req
解决方案
- 您需要在
inner
函数中返回有效响应 - 你需要把
metric
装饰器放在app.route
装饰器下面
我根据以上两点对您的代码进行了一些更改,您可以参考以下内容:
def metric(func):
def inner(*args, **kwargs):
print("*" * 30)
start = time.process_time()
res = func(*args, **kwargs) # get result from func()
latency = start - time.process_time()
print(func)
print("*" * 30)
print(latency)
return res # return result
return inner
@app.route('/test', methods=['GET', 'POST'])
@metric
def printer():
return 'Hello Flask'