色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Django權(quán)限設(shè)置及驗證方式

瀏覽:4日期:2024-10-08 08:32:51

當(dāng)創(chuàng)建一個Models, 在同步到數(shù)據(jù)庫里,django默認(rèn)設(shè)置了三個權(quán)限 ,就是 add, change, delete權(quán)限。但是往往有時候,根本不夠用,此時我們可以自己寫一個腳本,來進(jìn)行權(quán)限的設(shè)置.

根據(jù)DJango官方文檔解釋,權(quán)限都是與models有關(guān)系的,此時.如果想設(shè)置一個view,對于有權(quán)限的用戶進(jìn)行放行,對于無權(quán)限的用戶進(jìn)行限制.那么我們就可以著手來寫這個需求.

驗證權(quán)限的方法一般有兩種,一種是用@permission_required來進(jìn)行驗證,第二中是用user.has_perm()在函數(shù)里進(jìn)行驗證,通過返回的True或者False來進(jìn)行下一步

同時我的稍微復(fù)雜一些,是在django中加入了第三方認(rèn)證oauth2,并限制跨域訪問的資源.具體見我之前的文章.

具體步驟如下:

第一步:

設(shè)置跨域訪問資源范圍,如下:

CORS_URLS_REGEX = r’^/(o|api/oauth/).*$’ #只允許跨域訪問url為/o/....或者/api/oauth/...的資源

第二步:

寫一個設(shè)置permission腳本,或者你自己創(chuàng)建一個model,然后migrate得到django默認(rèn)提供的三個權(quán)限,當(dāng)然,這過于繁瑣和單一,你也可以自定義permission,在你創(chuàng)建的model里添加Meta類,然后創(chuàng)建你的自定義permission.如下:

class **Model():....class Meta:permissions = ( (can_read’’, ’查看’), (can_delete’’, ’刪除’),)

或者, 你可以自己寫一個創(chuàng)建permission的文件.這里,我的需求是根據(jù)用戶來限制是否訪問資源,直接在User上來進(jìn)行permission設(shè)置,如下:

from django.contrib.auth.models import Permission, Userfrom 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即可創(chuàng)建指定codename的permission,這與用戶是綁定的.

第三步:

驗證權(quán)限,最主要的有兩種方法,用裝飾器方法,或者在函數(shù)里用has_perm/has_perms,我這里使用裝飾器方法,當(dāng)然.最開始我自己手寫了一個驗證裝飾器,后來發(fā)現(xiàn),django有自帶的,也比較好用,直接在views函數(shù)錢@permission_required(perms)即可.

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

用法如下

class LimitView(ProtectedResourceView): @method_decorator(permission_required(per_list[0])) def get(self, request): ....

LimitView為我自己的視圖函數(shù),繼承自oauth的ProtectedResourceView,作用是保護視圖函數(shù)不被授權(quán)用戶查看.permission_required參數(shù)為用戶需要擁有的權(quán)限,如果有,可以正常訪問,否則,會重定向到登錄頁面,或者你可以在此處自己指定轉(zhuǎn)向頁面.

需要注意的是使用@permission_required(perms)時request.user需有字段,否則會報錯.我這里沒有登錄也可以訪問授權(quán)是因為我使用了用戶允許的授權(quán)碼訪問,會直接在request中設(shè)置user字段為該access_token對應(yīng)的user.

補充知識:django 校驗用戶是否有權(quán)限

views中判斷是否有權(quán)限:

{% if request.user.has_perm(’app.權(quán)限名’)%}…… {%endif%}

html中根據(jù)權(quán)限判斷控件是否顯示:

{% if perms.appname.codename%}{% endif%}

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

參考django文檔:https://docs.djangoproject.com/en/2.1/topics/auth/default/#permissions

以上這篇Django權(quán)限設(shè)置及驗證方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: a久久99精品久久久久久不 | 亚洲精品国产字幕久久不卡 | 国产在线一区二区三区 | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 亚洲图片视频在线观看 | 91精品国产免费久久久久久 | 欧美一区二区三区免费 | 亚洲精品国产专区91在线 | 国产亚洲欧美在线人成aaaa | 成人1000部免费观看视频 | 亚洲精品国产一区二区三 | 香蕉97碰碰视频免费 | 国产精品美女免费视频大全 | 欧美日韩国产高清一区二区三区 | 成人手机视频在线观看 | 国产一区二区三区在线观看精品 | 韩国一级特黄清高免费大片 | 国产猛烈无遮掩视频免费网站男女 | 国产在线视频一区 | 爽爽免费视频 | 国产第一区二区三区在线观看 | 亚洲国产一级毛片 | 国产成人手机视频 | 亚洲国产高清在线精品一区 | 久久久久久91 | 亚洲人成网站在线观看播放 | 亚洲成人影院在线观看 | 69日本xxxxxxxxx13 69视频成人 | 免费一级肉体全黄毛片 | 乱子伦一级在线现看 | 孩交啪啪网址 | 欧美激情亚洲一区中文字幕 | 日日噜噜噜夜夜爽爽狠狠69 | 亚洲国产成人久久综合一区77 | 亚洲激情 欧美 | 男女做性免费视频软件 | 成人国产精品毛片 | 亚洲日本欧美在线 | 精品日韩二区三区精品视频 | 国产亚洲欧美精品久久久 | 久久在线 |