如何在CherryPy中实现响应返回后执行回调函数?
在CherryPy中实现响应返回后调用函数的方案
没问题~我来帮你把这个逻辑在CherryPy里实现出来,和你原来的Tornado代码效果完全一致。
CherryPy提供了很直接的方式来实现“响应发送给客户端后执行特定函数”的需求,核心是利用cherrypy.response.callbacks这个回调列表——列表里的函数会在响应完全发送完毕后被触发执行,和你在Tornado里调用self.finish()后执行func()的逻辑对齐。
对应示例代码
def func(): print("hello") import cherrypy class Root: @cherrypy.expose def index(self): # 准备要返回的响应内容 response_content = "Hello, world" # 将func添加到响应回调,确保响应发送后再执行 cherrypy.response.callbacks.append(func) # 返回响应 return response_content if __name__ == "__main__": # 启动CherryPy应用,默认监听8080端口(如需改端口可加port参数,比如cherrypy.quickstart(Root(), port=8888)) cherrypy.quickstart(Root())
额外补充:全局请求后回调
如果你需要给所有请求都添加后置执行的函数,可以用CherryPy的Tool工具结合on_end_request钩子,示例如下:
def global_post_request_func(): print("所有请求完成后都会执行我") # 定义一个全局的后置请求工具 cherrypy.tools.post_request_hook = cherrypy.Tool('on_end_request', global_post_request_func) class Root: @cherrypy.expose @cherrypy.tools.post_request_hook() def index(self): return "Hello, world" @cherrypy.expose @cherrypy.tools.post_request_hook() def another_page(self): return "Another page content" if __name__ == "__main__": cherrypy.quickstart(Root())
这样不管访问哪个路由,响应发送后都会执行global_post_request_func。
内容的提问来源于stack exchange,提问作者DevanshBheda
相关产品推荐
相关产品推荐

