Sono un sostenitore di mantenere la logica fuori dal livello di visualizzazione (parlando in generale del modello di progettazione MVC). Quindi, perché non utilizzare i decoratori per indirizzare l'utente a visualizzazioni diverse in base al loro privilegio? Nella tua urls.py, definire un modello per gli amministratori:
url(r'^admin/$', 'user.views.admin_index'),
#do so for your other admin views, maybe more elegantly than this quick example
quindi definire una decoratrice a calci l'utente se non sono un amministratore
def redirect_if_not_admin(fn):
def wrapper(request):
if request.user.is_staff():
return fn(request)
#or user.is_superuser(), etc
else:
return HttpResponseRedirect('/Permission_Denied/')
return wrapper
E nelle viste di amministrazione
@redirect_if_not_admin
def index(request):
##do your thing
È più codice rispetto alle altre due risposte, che non sono sbagliate. È solo una preferenza personale per mantenere il disordine nelle viste.