разрешить вход только суперпользователю
-
05-07-2019 - |
Вопрос
Я написал страницу 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):
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
# ...
Другие советы
Код, который вы предложили, отлично подходит для меня, я использовал его во многих проектах, начиная с 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. Они немного сложнее, чем для более поздней версии.
для django 1.11 здесь немного похожая, но более простая стратегия. нажмите здесь