我写了一个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
但似乎没有给我带来错误。
答案 0 :(得分:50)
尝试:
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 :(得分:1)
你建议的代码对我来说非常适合,自从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。
答案 2 :(得分:0)
以上答案似乎适用于早期版本的django。它们比较晚的版本有点复杂
对于django 1.11这里有点类似但更简单的策略。 点击here