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

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

django自帶的權(quán)限管理Permission用法說明

瀏覽:78日期:2024-10-08 09:08:51

前言

一些公司內(nèi)部的CMS系統(tǒng)存在某些內(nèi)容讓指定的用戶有權(quán)限訪問,這時候可以用django自帶的權(quán)限管理進(jìn)行限制,比較方便。

缺點:django自帶的權(quán)限是針對model(模型)的,不能針對單條數(shù)據(jù),要針對單條數(shù)據(jù)需要額外的操作。

默認(rèn)的權(quán)限(add, change, delete, view)

django針對每個模型,生成了四個默認(rèn)的權(quán)限(add, change, delete, view)。例如,我有一個model叫Log,那么這四個默認(rèn)權(quán)限在數(shù)據(jù)庫的存儲格式為:

表auth_permission(注:id字段的值是隨便取的,使用python manage.py migrate的時候會自動生成)

id name content_type_id codename 1 Can add log 7 add_log 2 Can change log 7 change_log 3 Can delete log 7 delete_log 4 Can view log 7 view_log

字段解釋

id:自動生成的

name: 描述權(quán)限的的內(nèi)容,無太大的實際作用

content_type_id:與django_content_type中的id字段對應(yīng)

codename:權(quán)限表示值,換句話說用add_log來表示用戶對Log模型有新增權(quán)限。驗證權(quán)限的時候就是驗證這個值

那如果我的模型叫Student呢,把上面表中的log替換成student就行了。

name字段中Can add xx,Can change xx等都是固定的,只有xx是根據(jù)模型來的。

同理,codename字段也是一樣,add_xxx,change_xxx。

auth_permission表中content_type_id字段還沒有解釋,先來看下面這張表:

表django_content_type

id app_label model 1 admin logentry 3 auth group 2 auth permission 4 auth user 5 contenttypes contenttype 6 sessions session 7 test log

字段解釋

id:自增字段;auth_permission表的content_type_id字段就對應(yīng)這個值

app_label:屬于哪個app包,上面的Log就是test app下的模型

model:模型名字

使用方法

在函數(shù)中驗證權(quán)限,使用user.has_perm

例如:我們有一個書店,有普通員工A(model User),現(xiàn)在需要去出版社訂購一批書(model Book),我們判斷這個人是否有權(quán)利添加(add_book)書籍。

user = User.objects.get(username=’A’)# has_permission是一個boolean,因為Book模型是放在test app下面的has_permission = user.has_perm(’test.add_book’)

為什么驗證權(quán)限的時候前面要加app名,很好理解啊,不同app有同樣名字的權(quán)限,到底是驗證哪個呢?

驗證函數(shù)是否有執(zhí)行權(quán)限,使用@permission_required

@permission_requireddef function(): pass

permission_required有三個參數(shù):

perm,描述權(quán)限的字符串,格式為:app名.權(quán)限。如'auth.add_user',“auth.delete_user”

login_url,如果沒有權(quán)限需要跳轉(zhuǎn)的url字符串,如'/login',“https://www.baidu.com”

raise_exception,boolean值,沒有權(quán)限是否觸發(fā)PermissionDenied異常,觸發(fā)異常則直接返回,不會跳轉(zhuǎn)到login_url指向的地址

在template上使用權(quán)限驗證

第一種寫法

首先,我們需要在app的根目錄下創(chuàng)建一個名為templatetags的包(IDEA會自動在包下創(chuàng)建__init__文件),接著在包里面創(chuàng)建一個文件my_tags.py,在my_tags.py里面定義一個過濾器has_permission,使用這個濾器對用戶進(jìn)行權(quán)限驗證,它接收兩個參數(shù):

user,當(dāng)前登錄的用戶對象

perm,需要驗證的權(quán)限字符串

from django import templateregister = template.Library()@register.filterdef has_permisstion(user, perm): if user: return user.has_perm(perm) return False

接著,我們創(chuàng)建一個名為index.html的模板頁面,一定要記得加載標(biāo)簽文件{% load my_tags %}。

<!DOCTYPE html>{% load my_tags %}<html lang='en'><head><meta charset='UTF-8'><title>首頁</title></head><body><p>后面的內(nèi)容只有有權(quán)限的人才能看到,{% if request.user|has_permisstion:’test.add_department’ %}我有權(quán)限{% endif %}</p></body></html>

目錄結(jié)構(gòu):

django自帶的權(quán)限管理Permission用法說明

演示結(jié)果,我已經(jīng)登錄過了,并且有權(quán)限了:

django自帶的權(quán)限管理Permission用法說明

第二種寫法

使用模板里面的全局變量perms,例如perms.test.add_department

{% if perms.應(yīng)用名.權(quán)限標(biāo)識 %} <!-- 這里是有權(quán)限才顯示的內(nèi)容 -->{% endif %}

自定義權(quán)限

首先,我在test app的model文件中建立了一個Department模型,然后給他增加了一個自定義權(quán)限。

class Department(models.Model): name = models.CharField(null=True, max_length=20) user = models.ManyToManyField(User) one_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name=’one_user’) class Meta: # permissions是一個元組,記得每組權(quán)限后面加逗號,下面是一組權(quán)限 permissions = ( # (權(quán)限,權(quán)限描述), (’customize_permission’, ’This is my customize permission’), )

執(zhí)行下面語句進(jìn)行數(shù)據(jù)庫同步修改:

python manage.py makemigrationspython manage.py migrate

系統(tǒng)輸出,說明增加成功

>> Migrations for ’test’: testmigrations0003_auto_20200407_1645.py - Change Meta options on department

打開數(shù)據(jù)庫驗證,成功。

django自帶的權(quán)限管理Permission用法說明

然后,我們就能像前面一樣使用customize_permission這個權(quán)限了。

以上這篇django自帶的權(quán)限管理Permission用法說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 超声波乳化机-超声波分散机|仪-超声波萃取仪-超声波均质机-精浩机械|首页 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 消防设施操作员考试报名时间,报名入口,报考条件 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 广东青藤环境科技有限公司-水质检测 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 |