Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 仅允许超级用户登录_Django_Django Admin - Fatal编程技术网

Django 仅允许超级用户登录

Django 仅允许超级用户登录,django,django-admin,Django,Django Admin,我写了一个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

我写了一个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
但它似乎没有帮助,因为它给了我错误。

试试:

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时):


您建议的代码非常适合我,自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,这段代码非常适合我。

以上答案似乎适用于Django的早期版本。它们比更晚的版本有点复杂

对于Django1.11,这里有一个类似但更简单的策略。
单击

您的第二个代码段给您带来了什么错误?@Dominic我尝试使用user_Pass_test,但这会导致重定向循环。似乎它一次又一次地将请求重定向到登录屏幕,因为登录的用户不是超级用户。
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