2016-03-25 95 views
0

我使用的龍捲風,我聲明瞭這樣一個參數一個RequestHandler:獲取URL參數中準備()函數,而不是GET()/後()

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()方法訪問URL參數?

+0

你可以將其存儲在類變量和找回?像self.stuff_name = stuff_name? – lamirap

+0

@lamirap但是如何檢測一個人何時訪問'/ stuff/a/private'或'/ stuff/b/private'? self.stuff_name始終是相同的...(或者:當它更改時,我在哪裏更新它?) – wil93

回答

1

我認爲你可以使用self.request.path來獲得完整路徑,然後實現你需要的路徑值。

+0

它可以在'prepare()'中使用。 –

+0

也許這是唯一的解決方案...但它是非常醜陋的:( – wil93

+0

另外:如果我把路徑定義從'/ stuff /(.*)/ private''改成''/ private-stuff /(。 *)''?我需要改變'prepare()'裏面的邏輯嗎? – wil93