从Tornado Python中的RequestHandler访问URL

时间:2014-01-28 22:01:27

标签: python class handler tornado multiple-inheritance

在我的超级简单龙卷风网址调度程序中:

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Main MainHandler ")

class MainHandler1(tornado.web.RequestHandler):
    def get(self):
        self.write("Main MainHandler 1")

class api_v1(tornado.web.RequestHandler):
    def get(self):
        pass


if __name__ == "__main__":
    application = tornado.web.Application(handlers=[
        (r"/", MainHandler),
        (r"/main1/", MainHandler1),
        #Meta API from the Application URIs
        (r"/api/v1/", api_v1),
    ])


    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

如何从handlers访问class api_v1(tornado.web.RequestHandler)变量。有可能吗?。

我希望在用户访问http://.../api/v1/

时显示URLS模式

提前致谢。

2 个答案:

答案 0 :(得分:2)

传递给Application构造函数的处理程序表在事后不可用。而是在创建应用程序之前保存副本并将其提供给处理程序:

handlers = [...]
# Unrecognized keyword arguments end up in Application.settings; recognized ones
# get eaten.  Pass the handler table in twice, once for the Application itself
# and once for settings.
app = Application(handlers, handler_table=handlers)

在处理程序中使用self.settings['handler_table']

答案 1 :(得分:0)

这是一个轻微的黑客,因为它使用私有方法Application._get_host_handlers,但该方法多年来没有改变,所以它可能是安全的:

class api_v1(tornado.web.RequestHandler):
    def get(self):
        handlers = self.application._get_host_handlers(self.request)
        response = json.dumps([spec.regex.pattern for spec in handlers])
        self.finish(response)