2011-01-26 55 views
2

這似乎是一個簡單的問題,但我似乎無法找到一個簡單的答案。 Django似乎給了這種使用所需權限或登錄所需的裝飾器限制訪問位置的簡單方法,但是我從Django文檔看不到如何傳遞錯誤消息(可能使用消息框架)。如果我不得不推出我自己的裝飾器來做到這一點,那麼django裝飾器有什麼意義呢?他們只是沒有顯示任何錯誤信息?Django - 裝飾者和錯誤消息

+0

您是否閱讀過文檔?他們重定向到登錄頁面。 – 2011-01-26 02:13:22

回答

-1

我會認爲你只是避免閱讀本

http://docs.djangoproject.com/en/1.2/topics/auth/#the-login-required-decorator

login_required()執行以下操作:

如果用戶沒有登錄,重定向 到settings.LOGIN_URL,傳遞 查詢當前絕對路徑 字符串。例如: /accounts/login/?next=/polls/3/

如果用戶已經登錄,請正常執行 視圖。查看代碼是免費的 以假定用戶已登錄。

沒有「錯誤消息」。錯誤消息是粗魯的。很大程度上沒用。它們通常是設計不好的標誌。

通常,你不需要一百萬個微小的解釋。事實上,80%的用例默認登錄頁面正常工作。 如果您需要澄清情況,您可以提供自己的HTML表單。您可以使用普通的模板上下文來添加其他信息。您有Messages Framework用於在登錄頁面上顯示額外的消息。

+0

我讀過,謝謝。許多需要登錄的網站會將您的錯誤信息重定向到您必須登錄才能查看該頁面的信息。你是說我應該只是爲了顯示「你必須登錄」和另一個HTML頁面來顯示「你沒有權限」的HTML頁面?對我來說這似乎很愚蠢。如果您可以重定向到您的擁有登錄表單的主頁並提供一條消息,說明「請登錄」或「您沒有正確的權限」,這樣做會更有意義 – JPC 2011-01-26 03:06:11

+0

也許對於簡單的事情因爲需要登錄,但如果您需要特定的權限才能訪問某些內容並且您已登錄但未獲得所需權限,該怎麼辦?顯示某種類型的消息說明您需要什麼樣的權限是否有意義? – JPC 2011-01-26 03:10:17

0

您將發送自動錯誤的短信..你得看怎麼爲忽略用戶..

+0

你的意思是,重寫裝飾器並創建自己的? – JPC 2011-01-26 03:10:42

2

我認爲你正在將安全和權限與Django的身份驗證系統混合在一起。大多數情況下,Django的工具主要用於將用戶分爲兩組:驗證(登錄)和匿名。這對於90%的網站來說是有意義的,因爲你並不需要太多差異(對於隱藏的管理員來說可能是另一個,但這是一個邊緣情況,而不是常態)。

permission_required裝飾器是一個非常簡單的鉤子,用於希望重定向沒有權限轉到登錄頁面的用戶的人。但在某些時候,這還不夠。如果您需要特定權限並且用戶沒有該權限,那麼如何將其重定向到登錄頁面可以幫助他們?

在這種情況下,使用特定錯誤的消息來滾動您自己的裝飾器非常容易。一個這樣的例子:

def user_has_permissions(method): 
    return user_passes_test(lambda u: u.has_perm('my_permission'), login_url='/permission-denied/')(method)