Soy un defensor de mantener tanta lógica fuera de la capa de vista (hablando en general sobre el patrón de diseño de MVC). Entonces, ¿por qué no usar decoradores para dirigir a su usuario a diferentes vistas según su privilegio? En su urls.py, definir un patrón para los administradores:
url(r'^admin/$', 'user.views.admin_index'),
#do so for your other admin views, maybe more elegantly than this quick example
a continuación, definir un decorador de patear al usuario si no son un administrador
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
Y en sus puntos de vista de administración
@redirect_if_not_admin
def index(request):
##do your thing
Es más código que las otras dos respuestas, que no son incorrectas. Es solo una preferencia personal para mantener el desorden en las vistas.