En mi aplicación Django, necesito comenzar a ejecutar algunos trabajos en segundo plano periódicos cuando un usuario inicia sesión y dejar de ejecutarlos cuando el usuario cierra sesión, así que estoy buscando una forma elegante de
- ser notificado de un inicio de sesión / cierre de sesión de usuario
- consultar el estado de inicio de sesión del usuario
Desde mi perspectiva, la solución ideal sería
- una señal enviada por todos
django.contrib.auth.views.login
y... views.logout
- un método
django.contrib.auth.models.User.is_logged_in()
, análogo... User.is_active()
o... User.is_authenticated()
Django 1.1.1 no tiene eso y soy reacio a parchear la fuente y agregarla (no estoy seguro de cómo hacerlo, de todos modos).
Como solución temporal, agregué un is_logged_in
campo booleano al modelo UserProfile que se borra de manera predeterminada, se establece la primera vez que el usuario ingresa a la página de destino (definida por LOGIN_REDIRECT_URL = '/'
) y se consulta en 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 cierre de sesión, puedo borrar la marca, 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 (aunque eso es más bien una nitidez del modelo de datos), is_logged_in
no pertenece al UserProfile, sino al modelo User.
¿Alguien puede pensar en enfoques alternativos?