龙卷风Web自定义404不存在路径



我正在尝试更改龙卷风Web应用程序实例无法路由(或确认内容型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),
])

这感觉像是一个黑客。有没有办法在全球设置此设置?

根据文档,您可以使用 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)

您的代码的改编版本对我有用:

...
class NotFoundHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("404.html")

app = tornado.web.Application([
    (r"/ping", PingHandler),
   # ...
  (r"/.*", NotFoundHandler),
])

相关内容

  • 没有找到相关文章

最新更新