我开发在烧瓶内的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.
进去@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