Позволяя вводить только супер пользователя
Я написал страницу 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
но это, похоже, не помогает, поскольку дает мне ошибки.
Ответы
Ответ 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 здесь немного похожая, но более простая стратегия.
нажмите здесь