Подтвердить что ты не робот

Позволяя вводить только супер пользователя

Я написал страницу 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

но это, похоже, не помогает, поскольку дает мне ошибки.

4b9b3361

Ответ 1

Try:

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):
    # ...

Ответ 2

Код, который вы предлагаете, идеально подходит для меня, я использовал его во многих проектах с 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.

Ответ 3

Выше ответы, кажется, для ранних версий django. Они немного сложнее, чем для более поздней версии

для django 1.11 здесь немного похожая, но более простая стратегия. нажмите здесь