У моїй програмі 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 User.
Хтось може подумати про альтернативні підходи?