2009-09-10 14 views
15

Ho scritto una pagina django che richiede l'accesso solo a super utenti. Così ho aggiuntoche consente solo l'accesso super utente

foo_view = staff_member_required(foo_view) 

ma non taglia, ora posso controllare solo permettendo al personale segnalato agli utenti di accedere ma questo non taglia. Ho provato qualcosa come

def foo_view(request): 
     if not request.user.is_superuser: 
      #render some "not allowed page" 
     #else render the page 

ma non sembra aiutare come dandomi errori.

+0

Quali sono gli errori che ti danno il tuo secondo snippet di codice? –

risposta

48

Prova:

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) 

Or (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 per aver letto la mia mente:] –

+0

grazie mille Dominic! – Hellnar

+1

@Dominic Ho provato a utilizzare user_passes_test, tuttavia questo risulta in un ciclo di reindirizzamento. Sembra che stia reindirizzando la richiesta alla schermata di accesso più e più volte in quanto l'utente che ha effettuato l'accesso non è il superutente. –

1

Il codice hai suggerito opere perfette per me, l'ho usato in molti progetti dal 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 

Questo codice funziona perfettamente per me dal Django 1.4 a 1.7 almeno.

0

Sopra le risposte sembra essere per le versioni molto iniziali di Django. Sono un po 'complicati rispetto alla versione più recente

per django 1.11 ecco una strategia un po' simile ma più semplice. click here

Problemi correlati