在認證架構中還有其他的一些功能。 我們會在接下來的幾個部分中進一步地瞭解它們。
許可權
許可權可以很方便地標識使用者和使用者組可以執行的操作。 它們被Django的admin管理網站所使用,你也可以在你自己的代碼中使用它們。
Django的admin網站如下使用許可權:
- 只有設定了 add 許可權的使用者才能使用添加表單,添加對象的視圖。
- 只有設定了 change 許可權的使用者才能使用變更列表,變更表格,變更對象的視圖。
- 只有設定了 delete 許可權的使用者才能刪除一個對象。
許可權是根據每一個類型的對象而設定的,並不具體到對象的特定執行個體。 例如,我們可以允許Mary改變新故事,但是目前還不允許設定Mary只能改變自己建立的新故事,或者根據給定的狀態,出版日期或者ID號來選擇許可權。
會自動為每一個Django模型建立三個基本許可權:增加、改變和刪除。 當你運行manage.py syncdb命令時,這些許可權被添加到auth_permission資料庫表中。
許可權以 "._" 的形式出現。
就跟使用者一樣,許可權也就是Django模型中的 django.contrib.auth.models 。因此如果你願意,你也可以通過Django的資料庫API直接操作許可權。
組
組提供了一種通用的方式來讓你按照一定的許可權規則和其他標籤將使用者分類。 一個使用者可以隸屬於任何數量的組。
在一個組中的使用者自動獲得了賦予該組的許可權。 例如, Site editors 組擁有 can_edit_home_page 許可權,任何在該組中的使用者都擁有這個許可權。
組也可以通過給定一些使用者特殊的標記,來擴充功能。 例如,你建立了一個 'Special users' 組,並且允許組中的使用者訪問網站的一些VIP部分,或者發送VIP的郵件訊息。
和使用者管理一樣,admin介面是管理組的最簡單的方法。 然而,組也就是Django模型 django.contrib.auth.models ,因此你可以使用Django的資料庫API,在底層訪問這些組。
訊息
訊息系統會為給定的使用者接收訊息。 每個訊息都和一個 User 相關聯。
在每個成功的操作以後,Django的admin管理介面就會使用訊息機制。 例如,當你建立了一個對象,你會在admin頁面的頂上看到 The object was created successfully 的訊息。
你也可以使用相同的API在你自己的應用中排隊接收和顯示訊息。 API非常地簡單:
- 要建立一條新的訊息,使用 user.message_set.create(message='message_text') 。
- 要獲得/刪除訊息,使用 user.get_and_delete_messages() ,這會返回一個 Message 對象的列表,並且從隊列中刪除返回的項。
在例子視圖中,系統在建立了播放單(playlist)以後,為使用者儲存了一條訊息。
def create_playlist(request, songs): # Create the playlist with the given songs. # ... request.user.message_set.create( message="Your playlist was added successfully." ) return render_to_response("playlists/create.html", context_instance=RequestContext(request))
當使用 RequestContext ,當前登入的使用者以及他(她)的訊息,就會以模板變數 {{ messages }} 出現在模板的context中。
{% if messages %}
{% for message in messages %}
- {{ message }}
{% endfor %}
{% endif %}
需要注意的是 RequestContext 會在後台調用 get_and_delete_messages ,因此即使你沒有顯示它們,它們也會被刪除掉。
最後注意,這個訊息架構只能服務於在使用者資料庫中存在的使用者。 如果要向匿名使用者發送訊息,請直接使用會話架構。