将 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 格式的响应比它的价值更麻烦。