我在Tornado中遇到删除请求问题。请求到达服务器,处理程序中的所有内容都很好,但它永远不会将响应返回给客户端。
我试过返回一些东西,只有“返回”,甚至没有“返回”,结果总是一样。
我正在使用Python 3.4,Tornado 4.1和Firefox的RestClient。
@web.asynchronous
@gen.coroutine
def delete(self, _id):
try:
model = Model()
model.delete(_id)
self.set_status(204)
except Exception as e:
logging.error(e)
self.set_status(500)
return
答案 0 :(得分:1)
龙卷风文档(tornado.web.asynchronous):
如果给出了这个装饰器,当方法>时,响应没有完成。回报。由请求处理程序调用self.finish()来完成> HTTP请求。
您需要调用tornado.web.RequestHandler.finish方法。这将有效:
@web.asynchronous
@gen.coroutine
def delete(self, _id):
try:
model = Model()
model.delete(_id)
self.set_status(204)
except Exception as e:
logging.error(e)
self.set_status(500)
self.finish()
return
但是,在此示例中您不需要异步方法。这也将以同样的方式起作用:
def delete(self, _id):
try:
model = Model()
model.delete(_id)
self.set_status(204)
except Exception as e:
logging.error(e)
self.set_status(500)
return
此外,如果您使用@ gen.coroutine装饰器,则不需要使用@ web.asynchronous装饰器。只使用@ gen.coroutine,它是正确的方式,更优雅。
最后,我认为您应该阅读this article以了解Tornado中的异步编程。