Mit*_*tch 6 django django-admin
我无法弄清楚为什么必需的装饰器不能正常工作.我想只允许工作人员访问视图.我试过了
@permission_required('request.user.is_staff',login_url="../admin")
def series_info(request):
...
Run Code Online (Sandbox Code Playgroud)
并且
@permission_required('user.is_staff',login_url="../admin")
def series_info(request):
...
Run Code Online (Sandbox Code Playgroud)
作为超级用户,我可以访问该视图,但我作为工作人员创建的任何用户都无法访问它并被重定向到登录URL页面.我测试了login_required装饰器,工作正常.
Joh*_*kin 22
permission_required()必须传递权限名称,而不是字符串中的Python表达式.试试这个:
from contrib.auth.decorators import user_passes_test
def staff_required(login_url=None):
return user_passes_test(lambda u: u.is_staff, login_url=login_url)
@staff_required(login_url="../admin")
def series_info(request)
...
Run Code Online (Sandbox Code Playgroud)
谢谢.这确实有效.你有一个如何使用permission_required的例子吗?从文档docs.djangoproject.com/en/1.0/...和djangobook.com/en/2.0/chapter14我认为我应该工作.
重新阅读您发布的链接; permission_required()将测试用户是否已被授予特定权限.它不测试用户对象的属性.
来自http://www.djangobook.com/en/2.0/chapter14/:
def vote(request):
if request.user.is_authenticated() and request.user.has_perm('polls.can_vote'):
# vote here
else:
return HttpResponse("You can't vote in this poll.")
#
#
# # #
###
#
def user_can_vote(user):
return user.is_authenticated() and user.has_perm("polls.can_vote")
@user_passes_test(user_can_vote, login_url="/login/")
def vote(request):
# vote here
#
#
# # #
###
#
from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote', login_url="/login/")
def vote(request):
# vote here
Run Code Online (Sandbox Code Playgroud)
我就是这样做的:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def series_info(request):
...
Run Code Online (Sandbox Code Playgroud)
该文档介绍了 Staff_member_required:
视图的装饰器,用于检查用户是否已登录并且是工作人员,并在必要时显示登录页面。
| 归档时间: |
|
| 查看次数: |
19510 次 |
| 最近记录: |