我們經(jīng)常會有這樣的需求,給不同的用戶顯示不同的頁面,這樣的功能在Django是怎么實(shí)現(xiàn)在的呢?
其實(shí)這個邏輯很簡單,我們可以先預(yù)先設(shè)置好幾個組,每個組顯示的頁面都不同,我們可以把用戶分配到對應(yīng)的組里面,具體來說:
第一當(dāng)然是建立用戶表,我們選擇重寫Django自帶的用戶表,這樣就是繼承abstractuser了,然后再settings里填入AUTH_USER_MODEL = 'users.UserProfile',在類里面添加我們新的字段即可.
django自帶的權(quán)限管理更適合后臺管理,來管理控制某個用戶對后臺操作的權(quán)限,就是 add, change, delete權(quán)限。
那我們怎么自定義權(quán)限呢?
首先要在models中建立權(quán)限的名稱和描述信息,這個信息是在django admin中設(shè)置權(quán)限時顯示的信息.另外還要注意的是,我們必須為url設(shè)置name, 因?yàn)闄?quán)限需要和urlname配合使用,
第二,建立一個權(quán)限表Permission, 將權(quán)限的名稱,url名稱,請求方法(get or post), 參數(shù)列表保存進(jìn)去
第三步, 定義判斷權(quán)限的方法,這個就是描述你這個權(quán)限是干什么的,你想顯示什么樣的頁面,就在這里面寫好定義.
最終邏輯是這樣的:
用戶發(fā)送一個請求(打開一個頁面), 先獲取url地址,根據(jù)url地址得到urlname, 再獲取請求方法和參數(shù),然后使用(urlname, 請求方法,參數(shù)列表)這樣一個映射關(guān)系,到數(shù)據(jù)庫中查詢,能查詢到之后說明這個權(quán)限存在;然后再使用request.user.has_perm()來判斷該用戶是否具有該權(quán)限。
有權(quán)限,則根據(jù)我們第三步定義好的規(guī)則去返回,如果沒有,則需要我們再定義一個403頁面,這樣的話,就大功告成啦.