最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年05月13日 10:07:32   作者:C丶卡蘿爾  
這篇文章主要介紹了django自帶的權(quán)限管理Permission用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

前言

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

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

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

django針對(duì)每個(gè)模型,生成了四個(gè)默認(rèn)的權(quán)限(add, change, delete, view)。例如,我有一個(gè)model叫Log,那么這四個(gè)默認(rèn)權(quán)限在數(shù)據(jù)庫(kù)的存儲(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)容,無(wú)太大的實(shí)際作用

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

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

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

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

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

auth_permission表中content_type_id字段還沒(méi)有解釋?zhuān)葋?lái)看下面這張表:

表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字段就對(duì)應(yīng)這個(gè)值

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

model:模型名字

使用方法

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

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

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_required
def function():
 pass

permission_required有三個(gè)參數(shù):

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

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

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

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

第一種寫(xiě)法

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

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

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

from django import template

register = template.Library()

@register.filter
def has_permisstion(user, perm):
 if user:
  return user.has_perm(perm)
 return False

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

<!DOCTYPE html>
{% load my_tags %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首頁(yè)</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):

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

第二種寫(xiě)法

使用模板里面的全局變量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í)行下面語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)同步修改:

python manage.py makemigrations
python manage.py migrate

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

>> Migrations for 'test':
 test\migrations\0003_auto_20200407_1645.py
  - Change Meta options on department

打開(kāi)數(shù)據(jù)庫(kù)驗(yàn)證,成功。

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

以上這篇django自帶的權(quán)限管理Permission用法說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python遍歷目錄下文件、讀取、千萬(wàn)條數(shù)據(jù)合并詳情

    Python遍歷目錄下文件、讀取、千萬(wàn)條數(shù)據(jù)合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬(wàn)條數(shù)據(jù)合并詳情,對(duì)文件夾和文件進(jìn)行屬性判斷,首先對(duì)文件夾進(jìn)行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細(xì)介紹該內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • PyTorch筆記之scatter()函數(shù)的使用

    PyTorch筆記之scatter()函數(shù)的使用

    這篇文章主要介紹了PyTorch筆記之scatter()函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 在django中使用apscheduler 執(zhí)行計(jì)劃任務(wù)的實(shí)現(xiàn)方法

    在django中使用apscheduler 執(zhí)行計(jì)劃任務(wù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了如何在django中使用apscheduler 執(zhí)行計(jì)劃任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于tensorflow softmax函數(shù)用法解析

    關(guān)于tensorflow softmax函數(shù)用法解析

    這篇文章主要介紹了關(guān)于tensorflow softmax函數(shù)用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python 爬取免費(fèi)簡(jiǎn)歷模板網(wǎng)站的示例

    python 爬取免費(fèi)簡(jiǎn)歷模板網(wǎng)站的示例

    這篇文章主要介紹了python 爬取免費(fèi)簡(jiǎn)歷模板網(wǎng)站的示例,幫助大家更好的理解和使用python 爬蟲(chóng),感興趣的朋友可以了解下
    2020-09-09
  • Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例

    Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例,本文直接給出兩個(gè)實(shí)現(xiàn)例子,需要的朋友可以參考下
    2015-02-02
  • 用python結(jié)合jieba和wordcloud實(shí)現(xiàn)詞云效果

    用python結(jié)合jieba和wordcloud實(shí)現(xiàn)詞云效果

    詞云,顧名思義就是很多個(gè)單詞,然后通過(guò)出現(xiàn)的頻率或者比重之類(lèi)的標(biāo)準(zhǔn)匯聚成一個(gè)云朵的樣子嘛,其實(shí)呢現(xiàn)在網(wǎng)上已經(jīng)有很多能自動(dòng)生成詞云的工具了,比如Wordle,Tagxedo等等,Python也能實(shí)現(xiàn)這樣的效果,我們通過(guò)jieba庫(kù)和wordcloud庫(kù)也能十分輕松的完成詞云的構(gòu)建
    2017-09-09
  • Python加載數(shù)據(jù)的5種不同方式(收藏)

    Python加載數(shù)據(jù)的5種不同方式(收藏)

    這篇文章主要介紹了Python加載數(shù)據(jù)的5種不同方式(收藏),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python+requests接口壓力測(cè)試500次,查看響應(yīng)時(shí)間的實(shí)例

    python+requests接口壓力測(cè)試500次,查看響應(yīng)時(shí)間的實(shí)例

    這篇文章主要介紹了python+requests接口壓力測(cè)試500次,查看響應(yīng)時(shí)間的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python操作MongoDb數(shù)據(jù)庫(kù)流程詳解

    Python操作MongoDb數(shù)據(jù)庫(kù)流程詳解

    這篇文章主要介紹了Python操作MongoDb數(shù)據(jù)庫(kù)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

喀喇沁旗| 桑植县| 肥西县| 敖汉旗| 河西区| 台江县| 乐平市| 辉南县| 海晏县| 长寿区| 道真| 元朗区| 布拖县| 杭锦旗| 遂川县| 财经| 镇平县| 正定县| 定州市| 中牟县| 乌鲁木齐市| 中牟县| 龙川县| 古蔺县| 枝江市| 安宁市| 安陆市| 临邑县| 惠水县| 大丰市| 九龙城区| 黎平县| 大新县| 乡城县| 淳安县| 柯坪县| 师宗县| 海安县| 遵义县| 皮山县| 建昌县|