下面详细讲解Django的permission_required()
函数的作用与使用方法的完整攻略。
作用
permission_required()
函数是Django中用于控制视图权限的一种装饰器。通常情况下,我们可以在视图函数或类的方法上使用该装饰器,用于根据用户的权限来判断是否允许访问该视图。
使用方法
1. 函数视图
在将permission_required()
装饰器应用到函数视图上时,我们需要指定所需要的权限。例如:
from django.contrib.auth.decorators import permission_required
@permission_required('polls.view_poll')
def my_view(request):
# 该用户有权限
pass
上述代码中,我们将permission_required()
装饰器应用到了函数视图my_view
上,并指定了需要的权限为polls.view_poll
。如果当前登录用户没有该权限,则会被重定向到登录页面。
2. 类视图
当我们需要将permission_required()
装饰器应用到类视图上时,我们需要使用method_decorator()
进行包装,并将其应用到dispatch()
方法上。例如:
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import permission_required
from django.views.generic import View
@method_decorator(permission_required('polls.view_poll'), name='dispatch')
class MyView(View):
# 该用户有权限
pass
上述代码中,我们将permission_required()
装饰器应用到了类视图MyView
上,并指定了需要的权限为polls.view_poll
。如果当前登录用户没有该权限,则会被重定向到登录页面。
示例
示例一:限制视图的访问权限
假设我们有一个投票应用,并添加了一个视图用于显示投票结果:
from django.shortcuts import render
from django.contrib.auth.decorators import permission_required
@permission_required('polls.view_poll')
def poll_results(request, poll_id):
poll = Poll.objects.get(pk=poll_id)
return render(request, 'polls/results.html', {'poll': poll})
上述代码中,我们将permission_required()
装饰器应用到了poll_results
视图上,并指定了需要的权限为polls.view_poll
。如果当前登录用户没有该权限,则会被重定向到登录页面。
示例二:限制访问模型的管理页面
假设我们有一个模型MyModel
,并使用Django自带的后台管理来管理该模型。如果我们希望只有一部分用户能够访问该模型的管理页面,我们可以在admin.py
文件中使用permission_required()
装饰器:
from django.contrib.admin import ModelAdmin
from django.contrib.auth.decorators import permission_required
class MyModelAdmin(ModelAdmin):
@permission_required('polls.view_poll')
def changelist_view(self, request, extra_context=None):
# 显示模型列表的视图
pass
上述代码中,我们将permission_required()
装饰器应用到了changelist_view
方法上,并指定了需要的权限为polls.view_poll
。如果当前登录用户没有该权限,则会被重定向到登录页面。