详解Django的 permission_required() 函数:装饰器,限制未授权用户访问视图

  • Post category:Python

permission_required()函数是Django框架提供的一个装饰器,该装饰器可以用来限制用户对某个视图函数的访问权限,只有满足用户权限条件才能访问该视图函数,否则会自动跳转到指定的登录页面或错误页面。

该装饰器的基本用法如下:

from django.contrib.auth.decorators import permission_required

@permission_required('app_label.permission_name', login_url='/login/')
def my_view(request):
    # your view code here

其中,app_label.permission_name参数代表需要检查的权限。它是一个由应用名称和权限名称组成的字符串,中间以.分隔,例如:'blog.view_post' 表示 blog 应用下的 view_post 权限。如果需要多个权限,可以使用逗号分隔。

login_url参数指定权限不足时跳转的登录页面,如果不指定,默认跳转到/accounts/login/

下面提供两个实例:

  1. 针对某一功能页面需要管理员权限才能访问:
from django.contrib.auth.decorators import permission_required

@permission_required('auth.is_superuser', login_url='/login/')
def manage_users(request):
    # 仅管理员可以访问用户管理页面
    # your view code here

在这个例子中,auth.is_superuser表示auth应用下的操作超级用户权限,只有超级用户才能访问管理用户的页面。

  1. 针对某一视图函数需要特定权限才能访问:
from django.contrib.auth.decorators import permission_required

@permission_required('blog.add_post', login_url='/login/')
def create_post(request):
    # 仅拥有添加文章的权限的用户可以访问该函数
    # your view code here

在这个例子中,blog.add_post表示blog应用下的添加文章权限,只有拥有添加文章权限的用户才能访问create_post()函数。