2009-09-10 18 views
15

He escrito una página de django que solo requiere superusuarios para iniciar sesión. Así que he añadidopermitiendo solo el inicio de sesión de súper usuario

foo_view = staff_member_required(foo_view) 

pero no corta, ahora puedo controlar única que permite al personal marcó a los usuarios iniciar 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 ayudarme ya que me da errores.

+0

¿Qué errores le está dando su segundo fragmento de código? –

Respuesta

48

Probar:

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

+1 por leerme la mente:] –

+0

muchas gracias Dominic! – Hellnar

+1

@Dominic Intenté usar user_passes_test, pero esto da como resultado un bucle de redirección. Parece que está redirigiendo la solicitud a la pantalla de inicio de sesión una y otra vez, ya que el usuario que inició sesión no es el súper usuario. –

1

El código que sugirió obras perfectas para mí, que lo utilizó 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.

0

Las respuestas anteriores parecen ser para versiones muy antiguas de django. Son un poco más complicados que para la versión más reciente

para django 1.11 aquí hay una estrategia similar pero más simple. haga clic en here

Cuestiones relacionadas