在我的超级简单龙卷风网址调度程序中:
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/
提前致谢。
答案 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)