Django 許可權與分組

2021-09-25 17:11:40 字數 3302 閱讀 3751

在使用authenticate進行驗證後,如果驗證通過了。那麼會返回乙個user物件,拿到user物件後,可以使用django.contrib.auth.login進行登入。示例**如下:

user = authenticate(username=username, password=password)

if user is

notnone

:if user.is_active:

login(request, user)

登出,或者說退出登入。我們可以通過django.contrib.auth.logout來實現。他會清理掉這個使用者的session資料。

有時候,某個檢視函式是需要經過登入後才能訪問的。那麼我們可以通過django.contrib.auth.decorators.login_required裝飾器來實現。示例**如下:

from django.contrib.auth.decorators import login_required

# 在驗證失敗後,會跳轉到/accounts/login/這個url頁面

@login_required(login_url=

'/accounts/login/'

)def

my_view

(request)

:pass

django中內建了許可權的功能。他的許可權都是針對表或者說是模型級別的。比如對某個模型上的資料是否可以進行增刪改查操作。他不能針對資料級別的,比如對某個表中的某條資料能否進行增刪改查操作(如果要實現資料級別的,考慮使用django-guardian)。建立完乙個模型後,針對這個模型預設就有三種許可權,分別是增/刪/改/。可以在執行完migrate命令後,檢視資料庫中的auth_permission表中的所有許可權。

其中的codename表示的是許可權的名字。name表示的是這個許可權的作用。

如果我們想要增加新的許可權,比如檢視某個模型的許可權,那麼我們可以在定義模型的時候在meta中定義好。示例**如下:

class

article

(models.model)

: title = models.charfield(max_length=

100)

content = models.textfield(

) author = models.foreignkey(get_user_model(

),on_delete=models.cascade)

class

meta

: permissions =((

'view_article'

,'can view article'),

)

from django.contrib.auth.models import permission,contenttype

from

.models import article

content_type = contenttype.objects.get_for_model(article)

permission = permission.objects.create(name=

'可以編輯的許可權'

,codename=

'edit_article'

,content_type=content_type)

許可權本身只是乙個資料,必須和使用者進行繫結,才能起到作用。user模型和許可權之間的管理,可以通過以下幾種方式來管理:

myuser.user_permissions.set(permission_list):直接給定乙個許可權的列表。

myuser.user_permissions.add(permission,permission,...):乙個個新增許可權。

myuser.user_permissions.remove(permission,permission,...):乙個個刪除許可權。

myuser.user_permissions.clear():清除許可權。

myuser.get_all_permissons():獲取所有的許可權。

使用django.contrib.auth.decorators.permission_required可以非常方便的檢查使用者是否擁有這個許可權,如果擁有,那麼就可以進入到指定的檢視函式中,如果不擁有,那麼就會報乙個400錯誤。示例**如下:

from django.contrib.auth.decorators import permission_required

@permission_required(

'front.view_article'

)def

my_view

(request):.

..

許可權有很多,乙個模型就有最少三個許可權,如果一些使用者擁有相同的許可權,那麼每次都要重複新增。這時候分組就可以幫我們解決這種問題了,我們可以把一些許可權歸類,然後新增到某個分組中,之後再把和把需要賦予這些許可權的使用者新增到這個分組中,就比較好管理了。分組我們使用的是django.contrib.auth.models.group模型, 每個使用者組擁有idname兩個字段,該模型在資料庫被對映為auth_group資料表。

group.object.create(group_name):建立分組。

group.permissions:某個分組上的許可權。多對多的關係。

user.groups:某個使用者上的所有分組。多對多的關係。

settings.templates.options.context_processors下,因為新增了django.contrib.auth.context_processors.auth上下文處理器,因此在模板中可以直接通過perms來獲取使用者的所有許可權。

許可權分組管理

一,許可權分組列表 1.介面設計 1.介面說明 類目 說明 請求方法 get url定義 admin groups 引數格式 無引數 2.返回結果 html 二 許可權分組詳情頁 1.介面設計 類目 說明 請求發法 get url定義 admin group 引數格式 路徑引數 2.引數說明 引數名...

django框架F Q 聚合與分組操作示例

f 使用查詢條件的值,專門取物件中某列值的操作,可以對同乙個表中的兩個列進行比較 from django.db.models import f ret models.book.objects.filter count lt f sale values 查詢 列 count sale的資料 f程式設計...

許可權,角色,分組,部門

資源概念 資源就是想要的到的最終物質,我們可以給每乙個資源定義乙個許可權,也可以給某一類資源定義乙個許可權 許可權概念 許可權是對資源的一種保護訪問.使用者要訪問a資源前提是使用者必須有a資源的訪問許可權.角色概念 實事上我們不會直接把許可權賦予給使用者,而是通過角色來賦予給使用者,因為使用者擁有某...