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,操作更方便哦