将 Tornado html return 转换为 json 数据
Convert Tornado html return to json data
我有一个简单的龙卷风应用程序 return Hello World 获取请求,但如果方法是 POST/PUT/DELETE... 它是 returning HTML 响应像这样:
<html>
<title>405: Method Not Allowed</title>
<body>405: Method Not Allowed</body>
</html>
我想要这样的回应:
{ "error":"Method not allowed }
所以,我的问题是有没有办法 return 一个 json 响应而不是 html。下面是我到目前为止写的代码(我添加了 set header 但它只是 returning 上面相同的 html 数据,但格式为 json(我想要return 特定的 json 数据)那么,有没有办法做到这一点?
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header('Content-Type', 'application/json')
def get(self):
self.write("Hello, world")
class SecondHandler(tornado.web.RequestHandler):
def get(self, two):
self.write("Hello, worldddd")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/", SecondHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
谢谢
为此覆盖的方法是 RequestHandler.write_error
。
def write_error(self, status_code, **kwargs):
if status_code == 405:
self.finish({"error": "Method not allowed"})
else:
super().write_error(status_code, **kwargs)
但我鼓励您让您的客户端代码能够查看状态代码,而不管是否存在 json 格式的响应正文。追踪所有可能的 404 路径(等)以针对所有错误发出 json 格式的响应比它的价值更麻烦。
我有一个简单的龙卷风应用程序 return Hello World 获取请求,但如果方法是 POST/PUT/DELETE... 它是 returning HTML 响应像这样:
<html>
<title>405: Method Not Allowed</title>
<body>405: Method Not Allowed</body>
</html>
我想要这样的回应:
{ "error":"Method not allowed }
所以,我的问题是有没有办法 return 一个 json 响应而不是 html。下面是我到目前为止写的代码(我添加了 set header 但它只是 returning 上面相同的 html 数据,但格式为 json(我想要return 特定的 json 数据)那么,有没有办法做到这一点?
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header('Content-Type', 'application/json')
def get(self):
self.write("Hello, world")
class SecondHandler(tornado.web.RequestHandler):
def get(self, two):
self.write("Hello, worldddd")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/", SecondHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
谢谢
为此覆盖的方法是 RequestHandler.write_error
。
def write_error(self, status_code, **kwargs):
if status_code == 405:
self.finish({"error": "Method not allowed"})
else:
super().write_error(status_code, **kwargs)
但我鼓励您让您的客户端代码能够查看状态代码,而不管是否存在 json 格式的响应正文。追踪所有可能的 404 路径(等)以针对所有错误发出 json 格式的响应比它的价值更麻烦。