只允许超级用户登录

20

我编写了一个 Django 页面,只有超级用户才能登录。因此,我已经添加了以下代码:

foo_view = staff_member_required(foo_view)

但是它没有生效,现在我只能控制允许标记为员工的用户登录,但这还不够。我尝试了类似以下的方法:

def foo_view(request):
       if not request.user.is_superuser:
           #render some "not allowed page"
       #else render the page

但似乎没有帮助,反而给我带来了错误。


你的第二段代码出现了哪些错误? - Dominic Rodger
3个回答

57

尝试:

from django.contrib.auth.decorators import user_passes_test

def foo_view(request):
    # ...
foo_view = user_passes_test(lambda u: u.is_superuser)(foo_view)

或者(对于 Python >= 2.4):

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
    # ...

1
@Dominic 我尝试使用user_passes_test,但是这导致了一个重定向循环。似乎它一遍又一遍地将请求重定向到登录屏幕,因为已登录的用户不是超级用户。 - Ankit Jaiswal

4

您提供的代码对我来说非常完美,自Django 1.4以来我在许多项目中都使用了它:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def foo_view(request):
   if not request.user.is_superuser:
       return HttpResponse('The user is not superuser')

   # Do whatever you need to do

这段代码在Django 1.4至1.7版本中完美运行。

0

以上答案似乎是针对较早版本的Django。它们比较复杂,而较新版本则更简单。

对于Django 1.11,这里有一种类似但更简单的策略。点击此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接