如何确定“响应后”处理终点?

问题描述 投票:0回答:1

我开发在烧瓶内的REST API。某些端点需要的响应的处理之后执行附加的职责,但我想避免使用外部处理队列或线程。一个非常方便的解决方案似乎是WSGI中间件和ClosingIterator,如this answer概述。然而每一个点的处理程序需要知道哪个端点处理的要求,以履行其验尸的职责。

一种想法是装饰我的终点是这样的:

@app.route('/api/status/info', methods=['GET'])
def get_status_info():
    @app.after_this_response('get_status_info')
    def say_hi():
        print('hi, unknown endpoint!')

    return 'ok', 200

相反unknown endpoint的我想打印get_status_info。这可能吗?

更妙的是,如果我写一个通用@app.after_response处理程序(如another answer由同一作者),我可以在它确定用于处理请求哪个端点?

编辑:尝试使用flask.request.url_rule.endpoint抛出异常:

RuntimeError: Working outside of request context.
python flask werkzeug
1个回答
1
投票

进去@app.after_this_response你可以做以下的原始请求的端点:

@app.route('/api/status/info', methods=['GET'])
def get_status_info():

    @app.after_this_response('get_status_info')
    @flask.copy_current_request_context
    def say_hi():
        print('hi, %s', % (flask.request.url_rule.endpoint))

    return 'ok', 200

flask.request.url_rule.endpoint给你端点的名字,但是当它传递到say_hi功能,这就是为什么你需要的@copy_current_request_context装饰通过上下文你失去默认请求上下文。参考该装饰是在这里:http://flask.pocoo.org/docs/1.0/api/#flask.copy_current_request_context

© www.soinside.com 2019 - 2024. All rights reserved.