首页 > 解决方案 > 如何使用装饰器访问请求和响应?

问题描述

我想编写一个自定义装饰器来从端点获取指标,有没有办法让我访问请求以及来自装饰器的响应?如果不是,我该怎么做。

我想查看请求,以便稍后将其记录下来进行分析,然后我需要查看响应以确定它是什么类型的响应。下面是我的代码。这个想法是我将能够进入内部调用的函数来获取请求。

代码:

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

标签: pythonflask

解决方案


  1. 您需要在inner函数中返回有效响应
  2. 你需要把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'

推荐阅读