在prepare()函数中获取URL参数,而不是get()/ post()

时间:2016-03-25 03:35:43

标签: python tornado

我正在使用龙卷风,我用一个像这样的参数声明了一个RequestHandler:

class StuffHandler(RequestHandler):
    def get(self, stuff_name):
        ...

app = Application([
    (r'/stuff/(.*)/public', StuffHandler)
])

现在我为'/stuff/(.*)/private'添加了另一个处理程序,它需要对用户进行身份验证:

class PrivateStuffHandler(RequestHandler):
    @tornado.web.authenticated
    def get(self, stuff_name):
        ...

这当然会导致在get_current_user()之前调用get()。问题是,为了get_current_user()运行,我需要知道stuff_name参数。

所以我认为我可以使用在prepare()之前调用的initialize()get_current_user()方法。但是,我似乎无法从这些方法访问stuff_name。我尝试将stuff_name作为参数但它没有用,然后我尝试拨打self.get_argument("stuff_name"),但它也没有用。

如何从prepare()方法访问网址参数?

2 个答案:

答案 0 :(得分:1)

我认为您可以使用self.request.path获取完整路径,然后在路径中获得所需的值。

答案 1 :(得分:1)

最后,我问了straight to Tornado developers,一位乐于帮助的用户让我注意到班上任何地方都有self.path_argsself.path_kwargs

所以,从prepare()方法(甚至是get_current_user()方法),我可以做到:

stuff_name = self.path_args[0]