web-dev-qa-db-fra.com

Django: détecter la connexion administrateur dans la vue ou le modèle

Comment puis-je détecter, à partir de vues ou d'un fichier de modèle, si mon utilisateur administrateur est connecté ou non? Par exemple, cas d'utilisation pour mon site:

  1. L'utilisateur ouvre /admin/, entrez les informations d'identification correctes
  2. Ensuite, l'utilisateur ouvre une page, par exemple /page/ et il y a des boutons "Ajouter" et "Supprimer"
  3. L'utilisateur ouvre /admin/ et cliquez sur "Déconnexion"
  4. /page/ -> il n'y a pas de boutons "Ajouter" et "Supprimer"

Django version 1.4

32
Rusty

La réponse de Joseph convient parfaitement à votre cas simple, mais en réalité ni is_staff Ni is_superuser Ne conviennent parfaitement. En supposant que votre page est, disons, /polls/ (Une liste d'objets Poll, dans une application appelée poll), vous devez tester les poll.change_poll Et poll.delete_pollautorisations .

Dans un modèle:

{% for poll in polls %}
    {% if perms.poll.change_poll %}<a href='/polls/edit/{{ poll.id }}'>Edit</a>{% endif %}
    {% if perms.poll.delete_poll %}<a href='/polls/delete/{{ poll.id }}'>Delete</a>{% endif %}
{% endfor %}

Ou dans une vue en utilisant has_perm :

if not request.user.has_perm('poll.change_poll'):
    return HttpResponseForbidden('Nope!')

Ou dans une vue en utilisant un décorateur :

@permission_required('poll.change_poll')
def edit_poll(request, poll_id):
    # ....

Vous pouvez attribuer ces autorisations directement à un utilisateur, à un groupe (puis placer un utilisateur dans ce groupe) ou en définissant is_superuser.

16
supervacuo

Dans les modèles:

{% if user.is_superuser %}
    <p>Hello, admin.</p>
{% else %}
    <p>Hello, ordinary visitor.</p>
{% endif %}

En vues:

if request.user.is_superuser:
    # Hello, admin.
else:
    # Hello, ordinary visitor.

Selon vos besoins, is_staff pourrait être mieux adapté que is_superuser. Vous pouvez lire la différence ici .

77
Joe Mornin