当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。