2012-06-24 290 views
0

我是一個django新手,剛剛完成了教程(第04部分),所以現在我想繼續看看我是否可以爲我的項目添加一些身份驗證。我想限制對polls_results頁面的訪問,您只能在登錄時才能看到它。在最後一部分,結果頁面由一個通用視圖(DetailView)提供,這個通用視圖被分類並將方法裝飾器添加到了被覆蓋的分派方法。method_decorator login_required不起作用?

class VoteResults(DetailView): 
    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(VoteResults, self).dispatch(*args, **kwargs) 

在介紹之後,我提交表決後我希望看到一個not authorized error(401?),但我還是看到的結果頁(沒有錯誤),甚至說我絕對不會登錄了什麼事我丟了?所有中間件和已安裝的應用都存在於settings.py中,正如我相信的文檔所指出的那樣。

任何線索我在做什麼錯在這裏?

可能是調度方法名稱中的錯字。所以裝飾者從未被擊中。

+2

它可能只是你的代碼,但你正在裝飾一個名爲'dispatched'而不是'dispatch'的方法。 –

+0

是的這只是我的代碼在這裏編輯的問題。雙擊正在執行的日誌語句進行檢查。 –

+0

如果使用'@ login_required'而不是'@method_decorator(login_required)',該怎麼辦? – machaku

回答

0

而不是裝飾者,使用具有類似行爲的mixin。你可以自己寫一個,但我強烈建議從Django Braces使用LoginRequiredMixin

編輯:詳細說明,方法裝飾器不工作,因爲您將它應用於錯誤的方法。你可以使用login_required,但是打電話時URL配置的實際看,是這樣的:

url(r'^my_url$', login_required(MyClassView.as_view()), name='my_view') 

然而,混入是一個更清潔,更通用的方法。

相關問題