gpt4 book ai didi

python - 在 bottlepy after_request Hook 中访问响应对象

转载 作者:太空狗 更新时间:2023-10-30 00:56:06 25 4
gpt4 key购买 nike

我有以下网络应用:

import bottle
app = bottle.Bottle()

@app.route('/ping')
def ping():
print 'pong'
return 'pong'

@app.hook('after_request')
def after():
print 'foo'
print bottle.response.body

if __name__ == "__main__":
app.run(host='0.0.0.0', port='9999', server='cherrypy')

有没有办法在发回响应之前访问响应主体?

如果我启动应用程序并查询 /ping,我可以在控制台中看到 ping()after() 函数以正确的顺序运行

$ python bottle_after_request.py 
Bottle v0.11.6 server starting up (using CherryPyServer())...
Listening on http://0.0.0.0:9999/
Hit Ctrl-C to quit.

pong
foo

但是当在 after() 中我尝试访问 response.body 时,我没有任何东西。

在 Flask 中,after_request 装饰函数接受响应对象的输入,因此很容易访问它。我怎样才能在 Bottle 中做同样的事情?

有什么我想念的吗?

最佳答案

Is there a way to access the response body before sending the response back?

您可以编写一个简单的插件,它(取决于您实际尝试对响应执行的操作)可能就是您所需要的。

这是来自 Bottle plugin docs 的示例,它设置了一个请求 header 。它可以轻松地操纵 body

from bottle import response, install
import time

def stopwatch(callback):
def wrapper(*args, **kwargs):
start = time.time()
body = callback(*args, **kwargs)
end = time.time()
response.headers['X-Exec-Time'] = str(end - start)
return body
return wrapper

install(stopwatch)

希望这对您有用。

关于python - 在 bottlepy after_request Hook 中访问响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com