В моем приложении 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, поэтому мне не нужно создавать и настраивать встроенную модель User только для этой цели.
Мне не нравится это решение. Если пользователь явно нажимает кнопку выхода, я могу снять флажок, но в большинстве случаев пользователи просто покидают страницу или закрывают браузер; снятие флажка в этих случаях мне не кажется простым. Кроме того (это скорее придирка к ясности модели данных), is_logged_in
это относится не к UserProfile, а к модели User.
Кто-нибудь может придумать альтернативные подходы?