В моем приложении Django, мне нужно, чтобы начать работать несколько периодических фоновых заданий, когда пользователь входит в систему и остановить запуская их, когда пользователь выходит из системы, так что я ищу элегантный способ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.
Может ли кто-нибудь подумать об альтернативных подходах?
Пожалуйста, обратите внимание при выборе нового ответа. Принимаемый в настоящее время один очень плохой выбор в свете сигнала, добавленного в 1.3. – Bryson
Вы правы; изменил принятый ответ. – ssc