电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Django權限設置及驗證方式

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

當創建一個Models, 在同步到數據庫里,django默認設置了三個權限 ,就是 add, change, delete權限。但是往往有時候,根本不夠用,此時我們可以自己寫一個腳本,來進行權限的設置.

根據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, 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即可創建指定codename的permission,這與用戶是綁定的.

第三步:

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

由于此處我用的是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中判斷是否有權限:

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

html中根據權限判斷控件是否顯示:

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

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

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

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

標簽: Django
相關文章:
主站蜘蛛池模板: 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 高博医疗集团上海阿特蒙医院 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 免费B2B信息推广发布平台 - 推发网 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 热闷罐-高温罐-钢渣热闷罐-山东鑫泰鑫智能热闷罐厂家 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 查分易-成绩发送平台官网 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 防火门-专业生产甲级不锈钢钢质防火门厂家资质齐全-广东恒磊安防设备有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 番茄畅听邀请码怎么输入 - Dianw8.com | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 山东信蓝建设有限公司官网 | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 江苏农村商业银行招聘网_2024江苏农商行考试指南_江苏农商行校园招聘 |