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

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

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

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

前言

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

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

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

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

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

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:自動(dòng)生成的

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

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

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

那如果我的模型叫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)這個(gè)值

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

model:模型名字

使用方法

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

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

user = User.objects.get(username=’A’)# has_permission是一個(gè)boolean,因?yàn)锽ook模型是放在test app下面的has_permission = user.has_perm(’test.add_book’)

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

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

@permission_requireddef function(): pass

permission_required有三個(gè)參數(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ā)異常則直接返回,不會(huì)跳轉(zhuǎn)到login_url指向的地址

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

第一種寫法

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

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

perm,需要驗(yàn)證的權(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)建一個(gè)名為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)識(shí) %} <!-- 這里是有權(quán)限才顯示的內(nèi)容 -->{% endif %}

自定義權(quán)限

首先,我在test app的model文件中建立了一個(gè)Department模型,然后給他增加了一個(gè)自定義權(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是一個(gè)元組,記得每組權(quán)限后面加逗號(hào),下面是一組權(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ù)庫驗(yàn)證,成功。

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

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

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

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 成人在线精品 | 中国胖女人一级毛片aaaaa | 日本高清毛片视频在线看 | 国产精品亚洲欧美日韩区 | 德国女人一级毛片免费 | 久久免费精品 | 天天做天天爱夜夜大爽完整 | 日本特爽特黄特刺激大片 | 成年人免费在线视频观看 | 国产激情一区二区三区在线观看 | 日日摸夜夜搂人人要 | 久久精品一| 欧美一区二区三区在线视频 | 在线观看国产一区二区三区 | 国产91精品一区二区视色 | 免费a级毛片视频 | 69成人| 亚洲视频成人 | 免费一级特黄 欧美大片 | 亚洲欧美综合国产精品一区 | 欧美成人性毛片免费版 | 一级生性活免费视频 | fc2ppv在线播放 | 91久久国产成人免费观看资源 | 亚洲综合免费视频 | 久爱www免费人成福利播放 | 久久精品三级视频 | 欧美丝袜xxxxx在线播放 | 国产一区二区久久久 | 成人一级黄色毛片 | 337p粉嫩大胆噜噜噜鲁 | 中国女人18xnxx视频 | 久久18| 久草免费在线视频 | 成人自拍视频在线 | 久久久国产99久久国产久 | 国产一国产一有一级毛片 | 久久精品亚瑟全部免费观看 | 亚洲精品99久久一区二区三区 | 亚洲一区高清 | 欧美一区二区三区精品 |