Django許可權設定及驗證方式

2022-09-28 08:18:10 字數 2308 閱讀 4386

當建立乙個models, 在同步到資料庫裡,django預設設定了三個許可權 ,就是 add, change, delete許可權nmxbhhli。但是往往有時候,根本不夠用,此時我們可以自己寫乙個指令碼,來進行許可權的設定.

根據django官方文件解釋,許可權都是與models有關係的,此時.如果想設定乙個view,對於有許可權的使用者進行放行,對於無許可權的使用者進行限制.那麼我們就可以著手來寫這個需求.

驗證許可權的方法一般有兩種,一種是用@permission_required來進行驗證,第二中是用user.has_perm()在函式裡進行驗證,通過返回的true或者false來進行下一步

同時我的稍微複雜一些,是在django中加入了第三方認證oauth2,並限制跨域訪問的資源.具體見我之前的文章.

具體步驟如下:

第一步:

設定跨域訪問資源範圍,如下:

cors_urls_regex = r'^/(o|api/oauth/).*$'

#只允許跨域訪問url為/o/....或者/api/oauth/...的資源

第二步:

寫乙個設定permission指令碼,或者你自己建立乙個model,然後migrate得到django預設提供的三個許可權,當然,這過於繁瑣和單一,你也可以自定義permission,在你建立的model裡新增meta類,然後建立你的自定義permission.如下:

class **model():

....

class meta:

permissions = (

(can_read'', '檢視'),

(can_delete'', '刪除'),

)或者, 你可以自己寫乙個建立permission的檔案.這裡,我的需求是根據使用者來限制是否訪問資源,直接在user上來進行permission設定,如下:

from django.contrib.auth.models import permission, user

from django.contrib.contenttypes.models import contenttype

def run(codename, name):

content_type = contenttype.objects.get_for_model(user)

permission = permission.objects.get_or_create(codename=codename, name=name, content_type=content_type)

return permission

執行run即可建立指定codename的permission,這與使用者是繫結的.

第三步:

驗證許可權,最主要的有兩種方法,用裝飾器方法,或者在函式裡用has_perm/has_perms,我這裡使用裝飾器方法,當然.最開始我自己手寫了乙個驗證裝飾器,後來發現,django有自帶的,也比較好用,直接在views函式錢@permission_required(perms)即可.

由於此處我用的www.cppcns.com是django的視通函式,無法直接在函式前加@permission_required(perms),需要用到如下方法,可以將函式裝飾器改為方法或類裝飾器的方法,django自帶的@method_decorator(decorator),

用法如下

class limitview(protectedresourceview):

@method_decorator(permission_required(per_list[0]))

def get(self, request):

....

limitview為我自己的檢視函式,繼承自oauth的protectedresourceview,作用是保護檢視函式不被授權使用者檢視.permission_required引數為使用者需要擁有的許可權,如果有,可以正常訪問,否則,會重定向到登入頁面,或者你可以在此處自己指定轉向頁面.

需要注意的是使用@permission_required(perms)時request.user需有字段,否則會報錯.我這裡沒有登入也可以訪問授權是因為我使用了使用者允許的授權碼訪問,會直接在request中設定user欄位為該access_token對應的user.

補充知識:django 校驗使用者程式設計客棧是否有許可權

views中判斷是否有許可權:

…… html中根據許可權判斷控制項是否顯示:

切記:要想html中變數生效,必須傳入requestcontext,views.py中必須是render(request,'xx.html',{}),這個問題糾結很久。

本文標題: django許可權設定及驗證方式

本文位址: /jiaoben/python/313324.html

Django設定許可權

django1.9 使用django內建的許可權驗證機制。內建許可權表名 auth permissions models.py from django.db import models class student models.model class meta 內建許可權 default permi...

django 個人部落格登入及許可權驗證功能的實現

完成註冊後隨即開始進行登入,登入後頁面顯示登入者的名稱 實現如下 前端頁面html,對session進行判斷,有值則顯示登入者的名字 無值則顯示註冊字樣 後台views函式 首先對驗證碼進行驗證 驗證成功後將前端傳入的值放入form進行驗證 驗證成功後從資料庫中取值進行驗證,驗證成功後將所有的資訊全...

django 使用者登入及驗證

1 登入頁面如下 2 登入乙個使用者 從檢視中登入乙個使用者,請使用login 它接受乙個httprequest物件和乙個user物件。login 使用django的會話框架來將使用者的id儲存在會話中。注意任何在匿名會話中設定的資料都會在使用者登入後的會話中都會記住。先呼叫authenticate...