詳解Django中的權限和組以及消息
在認證框架中還有其他的一些功能。 我們會在接下來的幾個部分中進一步地了解它們。
權限
權限可以很方便地標識用戶和用戶組可以執(zhí)行的操作。 它們被Django的admin管理站點所使用,你也可以在你自己的代碼中使用它們。
Django的admin站點如下使用權限:
- 只有設置了 add 權限的用戶才能使用添加表單,添加對象的視圖。
- 只有設置了 change 權限的用戶才能使用變更列表,變更表格,變更對象的視圖。
- 只有設置了 delete 權限的用戶才能刪除一個對象。
權限是根據(jù)每一個類型的對象而設置的,并不具體到對象的特定實例。 例如,我們可以允許Mary改變新故事,但是目前還不允許設置Mary只能改變自己創(chuàng)建的新故事,或者根據(jù)給定的狀態(tài),出版日期或者ID號來選擇權限。
會自動為每一個Django模型創(chuàng)建三個基本權限:增加、改變和刪除。 當你運行manage.py syncdb命令時,這些權限被添加到auth_permission數(shù)據(jù)庫表中。
權限以 "<app>.<action>_<object_name>" 的形式出現(xiàn)。
就跟用戶一樣,權限也就是Django模型中的 django.contrib.auth.models 。因此如果你愿意,你也可以通過Django的數(shù)據(jù)庫API直接操作權限。
組
組提供了一種通用的方式來讓你按照一定的權限規(guī)則和其他標簽將用戶分類。 一個用戶可以隸屬于任何數(shù)量的組。
在一個組中的用戶自動獲得了賦予該組的權限。 例如, Site editors 組擁有 can_edit_home_page 權限,任何在該組中的用戶都擁有這個權限。
組也可以通過給定一些用戶特殊的標記,來擴展功能。 例如,你創(chuàng)建了一個 'Special users' 組,并且允許組中的用戶訪問站點的一些VIP部分,或者發(fā)送VIP的郵件消息。
和用戶管理一樣,admin接口是管理組的最簡單的方法。 然而,組也就是Django模型 django.contrib.auth.models ,因此你可以使用Django的數(shù)據(jù)庫API,在底層訪問這些組。
消息
消息系統(tǒng)會為給定的用戶接收消息。 每個消息都和一個 User 相關聯(lián)。
在每個成功的操作以后,Django的admin管理接口就會使用消息機制。 例如,當你創(chuàng)建了一個對象,你會在admin頁面的頂上看到 The object was created successfully 的消息。
你也可以使用相同的API在你自己的應用中排隊接收和顯示消息。 API非常地簡單:
- 要創(chuàng)建一條新的消息,使用 user.message_set.create(message='message_text') 。
- 要獲得/刪除消息,使用 user.get_and_delete_messages() ,這會返回一個 Message 對象的列表,并且從隊列中刪除返回的項。
在例子視圖中,系統(tǒng)在創(chuàng)建了播放單(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 }} 出現(xiàn)在模板的context中。
{% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %}
需要注意的是 RequestContext 會在后臺調(diào)用 get_and_delete_messages ,因此即使你沒有顯示它們,它們也會被刪除掉。
最后注意,這個消息框架只能服務于在用戶數(shù)據(jù)庫中存在的用戶。 如果要向匿名用戶發(fā)送消息,請直接使用會話框架。
相關文章
Python使用爬蟲抓取美女圖片并保存到本地的方法【測試可用】
這篇文章主要介紹了Python使用爬蟲抓取美女圖片并保存到本地的方法,涉及Python基于正則、爬蟲實現(xiàn)的圖片抓取與保存相關操作技巧,需要的朋友可以參考下2018-08-08Python破解BiliBili滑塊驗證碼的思路詳解(完美避開人機識別)
這篇文章主要介紹了Python破解BiliBili滑塊驗證碼的思路,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02