欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django自帶的權限管理Permission用法說明

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

前言

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

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

默認的權限(add, change, delete, view)

django針對每個模型,生成了四個默認的權限(add, change, delete, view)。例如,我有一個model叫Log,那么這四個默認權限在數(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: 描述權限的的內容,無太大的實際作用

content_type_id:與django_content_type中的id字段對應

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

那如果我的模型叫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字段就對應這個值

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

model:模型名字

使用方法

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

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

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

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

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

@permission_required
def function():
 pass

permission_required有三個參數(shù):

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

login_url,如果沒有權限需要跳轉的url字符串,如"/login",“https://www.baidu.com”

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

在template上使用權限驗證

第一種寫法

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

user,當前登錄的用戶對象

perm,需要驗證的權限字符串

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)建一個名為index.html的模板頁面,一定要記得加載標簽文件{% load my_tags %}。

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

目錄結構:

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

第二種寫法

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

{% if perms.應用名.權限標識 %}
 <!-- 這里是有權限才顯示的內容 -->
{% endif %}

自定義權限

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

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是一個元組,記得每組權限后面加逗號,下面是一組權限
  permissions = (
   # (權限,權限描述),
   ('customize_permission', 'This is my customize permission'),
  )

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

python manage.py makemigrations
python manage.py migrate

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

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

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

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

以上這篇django自帶的權限管理Permission用法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python基于數(shù)列實現(xiàn)購物車程序過程詳解

    Python基于數(shù)列實現(xiàn)購物車程序過程詳解

    這篇文章主要介紹了Python基于數(shù)列實現(xiàn)購物車程序過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 使用python實現(xiàn)簡單五子棋游戲

    使用python實現(xiàn)簡單五子棋游戲

    這篇文章主要為大家詳細介紹了使用python實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python基礎教程之異常詳解

    Python基礎教程之異常詳解

    調試Python程序時,經(jīng)常會報出一些異常,下面這篇文章就來給大家介紹了關于Python基礎教程之異常的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2019-01-01
  • Pytorch損失函數(shù)torch.nn.NLLLoss()的使用

    Pytorch損失函數(shù)torch.nn.NLLLoss()的使用

    這篇文章主要介紹了Pytorch損失函數(shù)torch.nn.NLLLoss()的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用Python為中秋節(jié)繪制一塊美味的月餅

    使用Python為中秋節(jié)繪制一塊美味的月餅

    這篇文章主要介紹了使用Python為中秋節(jié)繪制一塊美味的月餅,,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python ckeditor富文本編輯器代碼實例解析

    Python ckeditor富文本編輯器代碼實例解析

    這篇文章主要介紹了Python ckeditor富文本編輯器代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • django queryset相加和篩選教程

    django queryset相加和篩選教程

    這篇文章主要介紹了django queryset相加和篩選教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 詳解Python中RegEx在數(shù)據(jù)處理中的應用

    詳解Python中RegEx在數(shù)據(jù)處理中的應用

    正則表達式(Regular?Expressions,簡稱?RegEx)是一種強大的文本匹配和搜索工具,它在數(shù)據(jù)處理、文本解析和字符串操作中發(fā)揮著關鍵作用,下面就跟隨小編一起來了解一下RegEx的具體使用吧
    2024-01-01
  • Python中使用支持向量機(SVM)算法

    Python中使用支持向量機(SVM)算法

    這篇文章主要為大家詳細介紹了Python中使用支持向量機SVM算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python辦公自動化之教你用Python批量識別發(fā)票并錄入到Excel表格中

    Python辦公自動化之教你用Python批量識別發(fā)票并錄入到Excel表格中

    今天來分享一篇辦公干貨文章,對于財務專業(yè)等學生或者公司財務人員來說,將報賬發(fā)票等匯總到excel簡直就是一個折磨.尤其是到年底的時候,公司的財務人員面對一大堆的發(fā)票簡直就是苦不堪言.正好我們學會了Python,我們應該將Python的優(yōu)勢發(fā)揮起來,需要的朋友可以參考下
    2021-06-06

最新評論