examples - Django: detecta el inicio de sesión del administrador en la vista o en la plantilla
django templates examples (2)
¿Cómo puedo detectar, desde las vistas o el archivo de plantilla, si mi usuario administrador ha iniciado sesión o no? Por ejemplo, caso de uso para mi sitio:
- El usuario abre
/admin/
, ingresa las credenciales correctas - Luego, el usuario abre alguna página, por ejemplo
/page/
y hay botones "Agregar" y "Eliminar" - El usuario abre
/admin/
y hace clic en "Cerrar sesión" -
/page/
-> no hay botones "Agregar" y "Eliminar"
Django version 1.4
En plantillas:
{% if user.is_superuser %}
<p>Hello, admin.</p>
{% else %}
<p>Hello, ordinary visitor.</p>
{% endif %}
En vistas:
if request.user.is_superuser:
# Hello, admin.
else:
# Hello, ordinary visitor.
Dependiendo de sus necesidades, is_staff
podría ser un mejor ajuste que is_superuser
. Puedes leer acerca de la diferencia here .
La respuesta de Joseph está bien para su caso simple, pero en realidad ni is_staff
ni is_superuser
encajan perfectamente. Suponiendo que su página es, digamos, /polls/
(una lista de objetos Poll
, en una aplicación llamada poll
), debe probar los poll.change_poll
específicos de poll.change_poll
y poll.delete_poll
.
En una plantilla:
{% 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 %}
O en una vista usando has_perm
:
if not request.user.has_perm(''poll.change_poll''):
return HttpResponseForbidden(''Nope!'')
O en una vista usando un decorador :
@permission_required(''poll.change_poll'')
def edit_poll(request, poll_id):
# ....
Puede asignar estos permisos directamente a un usuario, a un grupo (y luego colocar a un usuario en ese grupo) o configurando is_superuser
.