Python 获取龙卷风URL';s匹配组

Python 获取龙卷风URL';s匹配组,python,arguments,tornado,Python,Arguments,Tornado,在Tornado中,您可以将正则表达式链接到RequestHandler。正则表达式中匹配的组作为参数传递到RequestHandler的get()或post()方法中 问题是,我想在调用get()或post()之前读取这些匹配组的值。Tornado是否有办法在get()或post()之外访问这些匹配的组?我想要类似于RequestHandler.arguments的东西。不幸的是,似乎没有从“prepare”访问url正则表达式匹配项的方法 查看tornado/web.py中的代码,尤其是第9

在Tornado中,您可以将正则表达式链接到RequestHandler。正则表达式中匹配的组作为参数传递到RequestHandler的get()或post()方法中


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

不幸的是,似乎没有从“prepare”访问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()

如何从访问request.arguments。这是通常进行GET/POST参数验证的地方。我不需要请求参数。我想要URL参数。例如,如果我的url是“/page/(\d+),我需要数字(\d+)。