當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Django permission_required用法及代碼示例


本文介紹 django.contrib.auth.decorators.permission_required 的用法。

聲明

permission_required(perm, login_url=None, raise_exception=False)

檢查用戶是否具有特定權限是一項相對常見的任務。出於這個原因,Django 為這種情況提供了一個快捷方式: permission_required() 裝飾器:

from django.contrib.auth.decorators import permission_required

@permission_required('polls.add_choice')
def my_view(request):
    ...

就像 has_perm() 方法一樣,權限名稱采用"<app label>.<permission codename>" 的形式(即polls.add_choice 表示polls 應用程序中模型的權限)。

裝飾器還可以獲取可迭代的權限,在這種情況下,用戶必須擁有所有權限才能訪問視圖。

請注意, permission_required() 還采用可選的 login_url 參數:

from django.contrib.auth.decorators import permission_required

@permission_required('polls.add_choice', login_url='/loginpage/')
def my_view(request):
    ...

login_required() 裝飾器一樣, login_url 默認為 settings.LOGIN_URL

如果給定 raise_exception 參數,裝飾器將引發 PermissionDenied ,提示 403(HTTP Forbidden)視圖,而不是重定向到登錄頁麵。

如果你想使用raise_exception,但也讓你的用戶有機會先登錄,你可以添加 login_required() 裝飾器:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
@permission_required('polls.add_choice', raise_exception=True)
def my_view(request):
    ...

LoginView redirect_authenticated_user=True 和 logged-in 用戶沒有所有必需的權限時,這也避免了重定向循環。

相關用法


注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.contrib.auth.decorators.permission_required。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。