(十四)Django學習——Auth系統中的表,auth系統中的User模型使用,使用auth系統實現註冊登錄案例;使用auth系統進行指定視圖的四種權限的設置,給指定用戶添加權限,給組添加權限!

1.Auth系統中的表

**我們登錄admin時創建的用戶信息是存放在哪裏了呢?
這就想到了我們映射數據庫時,Django自動創建的一些表!!!
**

(1)auth系統的數據表:

注意點:下面會進行多對多表關係的操作,而Django很人性化的一點是:如果是多對多關係產生的中間表,其命名方式是主表在前,從表在後!比如auth_group_permissions表,其中auth_group就是主表,auth_permissions就是從表,如果要進行兩表關聯,則從auth_group到auth_permissions是正向!!!
在這裏插入圖片描述

**從表的名稱我們就能看出,
auth_user,auth_group,auth_permission分別
存放了用戶,用戶組,權限的信息表.
另外三張表就是多對多的關係表
**

User:User是auth模塊中維護用戶信息的關係模式(繼承了models.Model), 數據庫中該表被命名爲auth_user.
Group:User對象中有一個名爲groups的多對多字段, 多對多關係由auth_user_groups數據表維護。Group對象可以通過user_set反向查詢用戶組中的用戶。
Permission:Django的auth系統提供了模型級的權限控制, 即可以檢查用戶是否對某個數據表擁有增(add),(change),(delete)權限。


(2)auth系統中User模型常用屬性和方法:

在這裏插入圖片描述在這裏插入圖片描述

在這裏插入圖片描述

(3)使用auth系統實現之前實現過的註冊登錄案例:

①auth系統功能小學習:

**在auth系統當中,django已經爲我們提供了一個用戶身份驗證,用戶組和權限管理這些功能, 那麼就可以使用它來完善我們註冊登錄這個項目:
**

auth認證系統功能:
create_user 創建用戶   
authenticate 驗證登錄
login 記住用戶的登錄狀態
logout 退出登錄
is_authenticated 判斷用戶是否登錄
login_required 判斷用戶是否登錄的裝飾器




接下來我們要在現有的項目中使用上述auth認證系統功能實現以下功能:

1.使用內置的auth_user表來存儲用戶註冊信息.

2.使用auth系統中的login,logout,authenticate實現登錄,退出和驗證登錄

3.給blog中的視圖設置登錄使用權限


注意: 對於這個登錄註冊的例子中, 我們把之前自己定義的模型類改成了使用auth系統中的User模型類, 在User類中同樣存在着用戶名,密碼,郵箱這幾個字段,
所以我們可以繼續使用之前的form表單和之前用過的模板.

②註冊登錄案例使用auth系統功能:

first!導入我們需要使用到的方法:
在這裏插入圖片描述
second!登錄裏面模型類相關的修改:
在這裏插入圖片描述

third!註冊裏面模型類相關的修改:

在這裏插入圖片描述

fourth!登錄裏面保存狀態的修改:
在這裏插入圖片描述
補充:現在前端驗證是否登錄的話直接user.username獲取即可!(如果登錄則會獲取到登錄的用戶的名字;未登錄則獲取不到。)

在這裏插入圖片描述

fifth!退出登錄裏面的修改:
在這裏插入圖片描述

sixth!判斷用戶是否登錄is_authenticated:(如果會話中,即用戶登錄了則if爲真;反之,如果未登錄則if爲假)

在這裏插入圖片描述

seventh!login_required裝飾器:(比如在一個看小說的網站中看小說時,如果你未登錄就去點擊觀看一本小說,它可能因爲你權限不夠沒有登錄,而給你跳轉到登錄頁面!)

首先:在setting文件中配置登錄的url(如果你訪問index路徑,但是你沒有登錄,那就自動給你跳轉到的URL):

在這裏插入圖片描述
然後:給需要登錄權限才能進入的視圖添加login_required裝飾器,
這裏是blog_server app當中的index視圖:

在這裏插入圖片描述
最後測試發現:在沒有登錄的狀態下去訪問我們的blog中主頁的url時就會出現跳轉到登錄頁.

eighth!next url的使用:(它可能因爲你權限不夠沒有登錄,而給你跳轉到登錄頁面。但是你登錄了之後要給你跳轉到你剛剛訪問的那個頁面!)

從剛纔的登錄頁跳轉中,我們會看到一個next的參數,
這個參數的值就是你剛剛訪問的那個頁面的路徑!
所以我們只需要在登錄業務邏輯中進行判斷,如果可以獲取到index參數,那就說明我們是因爲權限不夠沒有登錄而跳轉過來的;如果獲取不到Index參數,那就說明我們是正常登錄!

在這裏插入圖片描述

最後測試發現:我們如果再登錄之後就會跳轉到index頁面!

2.權限的實現

**查看數據庫中auth_permission這張表,在裏面有所有的表的一些操作權限(添加權限,修改權限,刪除權限,查看權限),這些是在表創建的同是添加進來的數據.
**

在這裏插入圖片描述

下面標記的是關於博客小案例的四個權限:添加權限,修改權限,刪除權限,查看權限(你會發現對應表的權限的名字是由其模型類名構成的!)
在這裏插入圖片描述
在這裏插入圖片描述

(1)permission_required裝飾器(給對應的視圖設置權限,讓除了超級用戶之外的用戶喪失設置的權限!可以依此方法設置任意四種權限!):

小提示:
如果是超級用戶是擁有所有權限的

①導入設置權限的方法:

在這裏插入圖片描述

**②@permission_required(appname.codename(權限名稱))
給blog_server app當中的add博客添加的視圖設置權限(此處設置的添加權限)
**

在這裏插入圖片描述

③現在如果訪問博客添加頁面,哪怕你登錄了普通用戶會發現也訪問失敗,它會自動給你跳轉到你settings.py文件中設置的權限不足而跳轉到的頁面裏!(此處爲登錄頁面。)

在這裏插入圖片描述

(2)給指定用戶添加權限:

通過觀察auth_permission權限表可知:如果你要給指定用戶添加某個權限,那實現的方法就是通過用戶信息表auth_user和權限信息表auth_permissons由於多對多關係產生的中間表auth_user_user_permissions的操作來完成,即讓指定的用戶與要添加的權限產生關係!(多對多表關係的添加)

①注意:要導入權限表!
在這裏插入圖片描述

②圖個方便,直接找個視圖在裏面進行操作:
在這裏插入圖片描述

③現在如果訪問博客添加頁面,哪怕你登錄了普通用戶(id爲1)會發現也可以訪問,這就說明咱給這個普通用戶成功添加了添加權限!

(3)給組添加權限:

如何理解?試想上面給少數用戶添加權限不是很麻煩,但是如果要給好多的用戶添加權限豈不是很麻煩,所以又了給組添加權限的概念。我們可以將刪除權限設置成一個組;查看權限設置成一個組…如果來了幾十個需要添加查看權限的用戶,只需將它們都扔進查看權限那個組即可!而且如果以後要對擁有查看權限的用戶的權限進行改動或者升級,這樣也非常方便!

組信息表的結構:

在這裏插入圖片描述

①注意:導入組信息表
在這裏插入圖片描述

②通過觀察組信息表的結構創建組:

在這裏插入圖片描述
在這裏插入圖片描述
③爲新創建的組添加權限(此處是添加了添加權限!):

在這裏插入圖片描述

④舉例將一個用戶扔進組中,說明如何將用戶放進具有權限的組中:
在這裏插入圖片描述

⑤現在如果訪問博客添加頁面,哪怕你登錄了普通用戶(id爲3)會發現也可以訪問,這就說明咱給這個普通用戶成功添加了添加權限!

項目源碼:

鏈接:https://pan.baidu.com/s/1CO8CABZHCVp-fj1bF-D6Dw
提取碼:a57w
複製這段內容後打開百度網盤手機App,操作更方便哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章