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.

¿Fue útil?

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í

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top