2017-05-04 65 views
0

我试图更改Tornado Web应用程序实例在路由失败(或确认Content-Type json)时给出的本机404响应。Tornado Web自定义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

根据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) 
+0

不知道我怎么错过了param--正是我一直在寻找,谢谢! – zvxr