获取Tornado URL的匹配组

时间:2011-12-01 00:07:18

标签: python arguments tornado

在Tornado中,您可以将Regexes链接到RequestHandlers。来自Regexes的匹配组作为参数传递给RequestHandler的get()或post()方法。

问题是,我想在调用get()或post()之前读取这些匹配组的值。 Tornado是否有办法在get()或post()之外访问这些匹配的组?我想要类似于RequestHandler.arguments的东西。

1 个答案:

答案 0 :(得分:3)

不幸的是,似乎没有办法从“准备”访问url正则表达式匹配。

查看tornado/web.py中的代码,尤其是第949行,调用prepare时没有参数。

我已经破解了一个有效的解决方案,但它根本不健全......就在这里。

import tornado.ioloop
import tornado.web
from tornado import escape

class MainHandler(tornado.web.RequestHandler):
    def prepare(self):
        # work out url regex match as in
        # tornado/web.py:1283
        handlers = self.application._get_host_handlers(self.request)
        for spec in handlers:
            match = spec.regex.match(self.request.path)
            def unquote(s):
                if s is None: return s
                return escape.url_unescape(s, encoding=None)
            args = [unquote(s) for s in match.groups()]
            # do something with args

    def get(self, who):
        self.write('hello ' + who)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/(\w+)", MainHandler),
    ])
    application.listen(8999)
    tornado.ioloop.IOLoop.instance().start()