我正在使用龙卷风,我用一个像这样的参数声明了一个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()
方法访问网址参数?
答案 0 :(得分:1)
我认为您可以使用self.request.path
获取完整路径,然后在路径中获得所需的值。
答案 1 :(得分:1)
最后,我问了straight to Tornado developers,一位乐于帮助的用户让我注意到班上任何地方都有self.path_args
和self.path_kwargs
。
所以,从prepare()
方法(甚至是get_current_user()
方法),我可以做到:
stuff_name = self.path_args[0]