詳解Django中的權(quán)限和組以及消息
在認(rèn)證框架中還有其他的一些功能。 我們會(huì)在接下來(lái)的幾個(gè)部分中進(jìn)一步地了解它們。
權(quán)限
權(quán)限可以很方便地標(biāo)識(shí)用戶和用戶組可以執(zhí)行的操作。 它們被Django的admin管理站點(diǎn)所使用,你也可以在你自己的代碼中使用它們。
Django的admin站點(diǎn)如下使用權(quán)限:
- 只有設(shè)置了 add 權(quán)限的用戶才能使用添加表單,添加對(duì)象的視圖。
- 只有設(shè)置了 change 權(quán)限的用戶才能使用變更列表,變更表格,變更對(duì)象的視圖。
- 只有設(shè)置了 delete 權(quán)限的用戶才能刪除一個(gè)對(duì)象。
權(quán)限是根據(jù)每一個(gè)類型的對(duì)象而設(shè)置的,并不具體到對(duì)象的特定實(shí)例。 例如,我們可以允許Mary改變新故事,但是目前還不允許設(shè)置Mary只能改變自己創(chuàng)建的新故事,或者根據(jù)給定的狀態(tài),出版日期或者ID號(hào)來(lái)選擇權(quán)限。
會(huì)自動(dòng)為每一個(gè)Django模型創(chuàng)建三個(gè)基本權(quán)限:增加、改變和刪除。 當(dāng)你運(yùn)行manage.py syncdb命令時(shí),這些權(quán)限被添加到auth_permission數(shù)據(jù)庫(kù)表中。
權(quán)限以 "<app>.<action>_<object_name>" 的形式出現(xiàn)。
就跟用戶一樣,權(quán)限也就是Django模型中的 django.contrib.auth.models 。因此如果你愿意,你也可以通過Django的數(shù)據(jù)庫(kù)API直接操作權(quán)限。
組
組提供了一種通用的方式來(lái)讓你按照一定的權(quán)限規(guī)則和其他標(biāo)簽將用戶分類。 一個(gè)用戶可以隸屬于任何數(shù)量的組。
在一個(gè)組中的用戶自動(dòng)獲得了賦予該組的權(quán)限。 例如, Site editors 組擁有 can_edit_home_page 權(quán)限,任何在該組中的用戶都擁有這個(gè)權(quán)限。
組也可以通過給定一些用戶特殊的標(biāo)記,來(lái)擴(kuò)展功能。 例如,你創(chuàng)建了一個(gè) 'Special users' 組,并且允許組中的用戶訪問站點(diǎn)的一些VIP部分,或者發(fā)送VIP的郵件消息。
和用戶管理一樣,admin接口是管理組的最簡(jiǎn)單的方法。 然而,組也就是Django模型 django.contrib.auth.models ,因此你可以使用Django的數(shù)據(jù)庫(kù)API,在底層訪問這些組。
消息
消息系統(tǒng)會(huì)為給定的用戶接收消息。 每個(gè)消息都和一個(gè) User 相關(guān)聯(lián)。
在每個(gè)成功的操作以后,Django的admin管理接口就會(huì)使用消息機(jī)制。 例如,當(dāng)你創(chuàng)建了一個(gè)對(duì)象,你會(huì)在admin頁(yè)面的頂上看到 The object was created successfully 的消息。
你也可以使用相同的API在你自己的應(yīng)用中排隊(duì)接收和顯示消息。 API非常地簡(jiǎn)單:
- 要?jiǎng)?chuàng)建一條新的消息,使用 user.message_set.create(message='message_text') 。
- 要獲得/刪除消息,使用 user.get_and_delete_messages() ,這會(huì)返回一個(gè) Message 對(duì)象的列表,并且從隊(duì)列中刪除返回的項(xiàng)。
在例子視圖中,系統(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))
當(dāng)使用 RequestContext ,當(dāng)前登錄的用戶以及他(她)的消息,就會(huì)以模板變量 {{ messages }} 出現(xiàn)在模板的context中。
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
需要注意的是 RequestContext 會(huì)在后臺(tái)調(diào)用 get_and_delete_messages ,因此即使你沒有顯示它們,它們也會(huì)被刪除掉。
最后注意,這個(gè)消息框架只能服務(wù)于在用戶數(shù)據(jù)庫(kù)中存在的用戶。 如果要向匿名用戶發(fā)送消息,請(qǐng)直接使用會(huì)話框架。
- Laravel框架實(shí)現(xiàn)的rbac權(quán)限管理操作示例
- 詳解利用 Vue.js 實(shí)現(xiàn)前后端分離的RBAC角色權(quán)限管理
- php 人員權(quán)限管理(RBAC)實(shí)例(推薦)
- Yii2搭建后臺(tái)并實(shí)現(xiàn)rbac權(quán)限控制完整實(shí)例教程
- ThinkPHP的RBAC(基于角色權(quán)限控制)深入解析
- 使用django-guardian實(shí)現(xiàn)django-admin的行級(jí)權(quán)限控制的方法
- Django RBAC權(quán)限管理設(shè)計(jì)過程詳解
相關(guān)文章
python實(shí)現(xiàn)定時(shí)發(fā)送qq消息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)定時(shí)發(fā)送qq消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作
這篇文章主要介紹了Python實(shí)現(xiàn)Kerberos用戶的增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-12-12
解決python中用matplotlib畫多幅圖時(shí)出現(xiàn)圖形部分重疊的問題
今天小編就為大家分享一篇解決python中用matplotlib畫多幅圖時(shí)出現(xiàn)圖形部分重疊的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-07-07
pycharm執(zhí)行python時(shí),填寫參數(shù)的方法
今天小編就為大家分享一篇pycharm執(zhí)行python時(shí),填寫參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-10-10
Python 將json序列化后的字符串轉(zhuǎn)換成字典(推薦)
這篇文章主要介紹了Python 將json序列化后的字符串轉(zhuǎn)換成字典,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試的方法步驟
這篇文章主要介紹了Pycharm同步遠(yuǎn)程服務(wù)器調(diào)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

