在所有Tornado处理程序中共享write_error方法?

时间:2012-07-02 13:39:53

标签: web tornado handlers

我正在使用龙卷风,并有一堆映射到不同网址的处理程序。例如:

#mainfile.py

#imports
#...
application = tornado.web.Application([
    (r"/", DefaultHandler),
    (r"/somepath", SomepathHandler),
], debug=True)

if __name__ == "__main__":
    tornado.options.parse_command_line()
    port = int(os.environ.get("PORT", 8001))
    application.listen(port)
    tornado.ioloop.IOLoop.instance().start()

现在,在DefaultHandler和SomepathHandler中,我不喜欢错误消息的显示方式,所以我决定覆盖write_error方法,如下所示:

#DefaultHandler.py
class DefaultHandler(tornado.web.RequestHandler):

    def write_error(self, status_code, **kwargs):
        self.write("a nicer message")

    def initialize(self):
        #stuff
    def get(self):
        #more stuff, etc.

然后

#Somepathhandler.py
class SomepathHandler(tornado.web.RequestHandler):
    def write_error(self, status_code, **kwargs):
        self.write("a nicer message")

这肯定会继续与其他处理程序一起。我阅读了Tornado文档,看起来我应该是class tornado.web.RequestHandler(application, request, **kwargs)的子类,但是还没有成功地做到这一点。我不太确定课程应该去哪里,如何让它注册我的申请?

谢谢!

1 个答案:

答案 0 :(得分:1)

你快到了。如你所说,你只需要继承RequestHandler。只要您将其导入到需要的位置,该类就可以进入任何文件。

class BaseHandler(tornado.web.RequestHandler):

    def write_error(self, status_code, **kwargs):
        self.write("a nicer message")

class DefaultHandler(BaseHandler):

    def initialize(self):
        pass

    def get(self):
        pass

class SomepathHandler(BaseHandler):
    pass