В моем приложении Django мне нужно запустить несколько периодических фоновых заданий, когда пользователь входит в систему и перестает запускать их, когда пользователь выходит из системы, поэтому я ищу элегантный способ
- получить уведомление о входе/выходе пользователя
- запрашивать статус входа пользователя
С моей точки зрения, идеальным решением было бы
- сигнал, отправленный каждым
django.contrib.auth.views.login
и... views.logout
- метод
django.contrib.auth.models.User.is_logged_in()
, аналогичный... User.is_active()
или... User.is_authenticated()
В Django 1.1.1 этого нет, и я не хочу исправлять исходный код и добавлять его (не знаю, как это сделать, так или иначе).
В качестве временного решения я добавил логическое поле is_logged_in
в модель UserProfile, которая по умолчанию очищается, устанавливается при первом обращении пользователя к целевой странице (определяется LOGIN_REDIRECT_URL = '/'
) и запрашивается в последующих Запросы. Я добавил его в UserProfile, поэтому мне не нужно выводить и настраивать встроенную модель пользователя только для этой цели.
Мне не нравится это решение. Если пользователь явно нажимает кнопку выхода, я могу очистить флаг, но большую часть времени пользователи просто покидают страницу или закрывают браузер; очистка флага в этих случаях не кажется мне прямой. Кроме того (что, скорее, ясность четности данных модели), is_logged_in
не принадлежит в UserProfile, а в модели User.
Может ли кто-нибудь подумать об альтернативных подходах?