Modificar la tabla django_session
para agregar un user_id
explícito puede hacer la vida mucho más fácil. Suponiendo que hace eso (o algo similar), aquí hay cuatro enfoques para abatir cosas a su gusto:
Tenedor el código django.contrib.session
. Lo sé, lo sé, es algo horrible de sugerir. Pero solo son 500 líneas, incluidos todos los back-end y menos las pruebas. Es bastante fácil de hackear. Esta es la mejor ruta solo si vas a hacer una reorganización seria de las cosas.
Si no desea realizar un fork, intente conectarse a la señal Session.post_save
y transmita allí.
O podría MonkeyPatch contrib.session.models.Session.save()
. Simplemente ajuste el método existente (o cree uno nuevo), desglose/sintetice los valores que necesite, almacénelos en sus nuevos campos y luego super(Session, self).save()
.
Sin embargo, otra manera de hacer esto es poner en 2 (sí, dos) clases de middleware - uno antes y otro después de SessionMiddleware
en su settings.py archivo. Esto se debe a la forma en que se procesa el middleware. El que aparece después de SessionMiddleware
recibirá, en la solicitud de entrada, una solicitud con la sesión ya asociada. El que se mencionó anteriormente puede hacer cualquier procesamiento en la respuesta y/o cambiar/volver a guardar la sesión.
Utilizamos una variación de esta última técnica para crear pseudo-sesiones para las arañas de los motores de búsqueda para darles acceso especial al material que normalmente es solo para miembros.También detectamos enlaces entrantes donde el campo REFERER
es del motor de búsqueda asociado y le damos acceso total al usuario a ese artículo.
Actualización:
Mi respuesta es ahora bastante antiguo, aunque todavía se encuentra en su mayoría correcto. Vea la respuesta mucho más reciente de @Gavin_Ballard (9/29/2014) a continuación para otro acercamiento a este problema.
Hacer esto puede romper las pruebas si lo hace sin forzar el código django. Si la aplicación de sesiones está en INSTALLED_APPS, la tabla de sesiones se creará dos veces y se cancelarán las pruebas. No estoy seguro de si es seguro eliminar la aplicación de sesión django si proporcionó su propia tabla django_session. –
Las sesiones de usuario de Django ahora están disponibles para darle esta funcionalidad: https://github.com/Bouke/django-user-sessions – sww314
@ sww314 - Hice un escaneo rápido del proyecto GitHub vinculado, y parece una opción muy razonable acercamiento al problema ¡Gracias! –