En mi aplicación Django, necesito para empezar a ejecutar algunos trabajos periódicos de los antecedentes cuando un usuario inicia sesión y dejar de funcionar cuando el usuario cierra la sesión, así que estoy buscando una manera elegante deDjango: ¿señal cuando el usuario inicia sesión?
- ser notificado de un inicio de sesión de usuario/cierre de sesión
- consulta de estado de inicio de sesión de usuario
Desde mi punto de vista, la solución ideal sería
- una señal enviada por caday
... views.logout
- un método
django.contrib.auth.models.User.is_logged_in()
, análoga a... User.is_active()
o... User.is_authenticated()
Django 1.1.1 no tiene que y yo soy reacio a parchear la fuente y añadirlo (no estoy seguro de cómo hacerlo, de todos modos) .
como una solución temporal, he añadido un campo booleano is_logged_in
al modelo PerfilUsuario que se elimina de forma predeterminada, se establece la primera vez que el usuario realiza la página de destino (definido por LOGIN_REDIRECT_URL = '/'
) y se consulta en las solicitudes posteriores. Lo agregué a UserProfile, por lo que no tengo que derivar y personalizar el modelo de Usuario incorporado solo para ese propósito.
No me gusta esta solución. Si el usuario hace clic explícitamente en el botón de cerrar sesión, puedo borrar el indicador, pero la mayoría de las veces, los usuarios simplemente abandonan la página o cierran el navegador; limpiar la bandera en estos casos no me parece sencillo. Además (eso es más bien nitidez de modelo de datos), is_logged_in
no pertenece al perfil de usuario, sino al modelo de usuario.
¿Alguien puede pensar en enfoques alternativos?
favor consideren seleccionar una nueva respuesta. El aceptado actualmente es una opción muy pobre a la luz de la señal agregada en 1.3. – Bryson
Tienes razón; cambió la respuesta aceptada. – ssc