在Tornado中,您可以将Regexes链接到RequestHandlers。来自Regexes的匹配组作为参数传递给RequestHandler的get()或post()方法。
问题是,我想在调用get()或post()之前读取这些匹配组的值。 Tornado是否有办法在get()或post()之外访问这些匹配的组?我想要类似于RequestHandler.arguments的东西。
答案 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()