Question

J'ai écrit une page Django dans laquelle seuls les super-utilisateurs doivent se connecter. J'ai donc ajouté

foo_view = staff_member_required(foo_view)

mais cela ne coupe pas, maintenant je peux contrôler uniquement autoriser les utilisateurs marqués du personnel à se connecter mais cela ne coupe pas. J'ai essayé quelque chose comme

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

mais cela ne semble pas m'aider à me donner des erreurs.

Était-ce utile?

La solution

Essayez:

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)

Ou (avec Python > = 2.4):

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
    # ...

Autres conseils

Le code que vous avez suggéré fonctionne parfaitement pour moi, je l'ai utilisé dans de nombreux projets depuis 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

Ce code me convient parfaitement depuis Django 1.4 à 1.7 au moins.

Les réponses ci-dessus semblent concerner les toutes premières versions de Django. Ils sont un peu compliqués que pour la version plus récente

pour django 1.11, voici une stratégie un peu similaire mais plus simple. cliquez ici

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top