我正在尝试更改Tornado Web应用程序实例在无法路由(或确认Content-Type json)时提供的本机404响应。
我找不到文档来执行此操作,所以我现在只是添加一个匹配所有内容的最终正则表达式:
import tornado.web
class BaseHandler(tornado.web.RequestHandler):
def write_error(self, status_code, **kwargs):
self.finish({
'error': {
'code': status_code,
'message': self._reason,
}
})
class NotFoundHandler(BaseHandler):
def get(self, *args, **kwargs):
raise tornado.web.HTTPError(
status_code=404,
reason="Invalid resource path."
)
app = tornado.web.Application([
(r"/ping", PingHandler),
# ...
(r"(.*)", NotFoundHandler),
])
这感觉有点像黑客。有没有办法更全面地设置这个?
答案 0 :(得分:0)
根据documentation,您可以使用default_handler_class
来执行此操作。
对于404错误,请使用
default_handler_class
应用程序设置。 此处理程序应覆盖prepare
而不是更具体 像get()
这样的方法,所以它适用于任何HTTP方法。这应该 如上所述产生错误页面:通过提出一个HTTPError(404)
并覆盖write_error
或致电self.set_status(404)
并直接在其中生成响应prepare()
。
例如:
class NotFoundHandler(RequestHandler):
def prepare(self): # for all methods
raise tornado.web.HTTPError(
status_code=404,
reason="Invalid resource path."
)
app = Application(..., default_handler_class=NotFoundHandler)
答案 1 :(得分:0)
经过修改的代码对我有用:
...
class NotFoundHandler(tornado.web.RequestHandler):
def get(self):
self.render("404.html")
app = tornado.web.Application([
(r"/ping", PingHandler),
# ...
(r"/.*", NotFoundHandler),
])