2017-05-04 6 views
0

Tornado Web Applicationインスタンスがルーティング(または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をオーバーライドする必要があります。つまり、任意の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

関連する問題