permitiendo solo el inicio de sesión de superusuario
-
05-07-2019 - |
Pregunta
He escrito una página de django que solo requiere que los súper usuarios inicien sesión. Así que he añadido
foo_view = staff_member_required(foo_view)
pero no corta, ahora puedo controlar solo permitiendo que el personal marcado usuarios inicie sesión pero esto no corta. He intentado algo como
def foo_view(request):
if not request.user.is_superuser:
#render some "not allowed page"
#else render the page
pero no parece ayudar, ya que me da errores.
Solución
Prueba:
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)
O (con Python > = 2.4):
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
# ...
Otros consejos
El código que sugirió funciona perfecto para mí, lo usé en muchos proyectos desde 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
Este código funciona perfecto para mí desde Django 1.4 a 1.7 al menos.
Las respuestas anteriores parecen ser para versiones muy tempranas de django. Son un poco complicados que para la versión más posterior
para django 1.11 aquí hay una estrategia un poco similar pero más simple. haga clic en aquí