Я работаю над проектом с использованием Python (2.7) и Django (1.11), в котором мне нужно было реализовать автоматический выход из системы в течение нескольких минут или часов.
Примечание: Я много искал и изучал различные связанные вопросы, но не смог найти решения для моей конкретной проблемы, поэтому не помечайте его как дубликат, пожалуйста!
Я достиг этой цели, добавив некоторые настройки в settings.py
как:
SESSION_COOKIE_AGE = 120
SESSION_SAVE_EVERY_REQUEST = True
LOGOUT_REDIRECT_URL = 'mainlogin'
Только для целей тестирования, я настроил его на 2 минуты.Через 2 минуты, когда я обновляю страницу, пользователь выходит из системы и перенаправляется на страницу входа, но в бэкэнде / базе данных статус пользователя по-прежнему active
.
. Мне нужно использовать активных пользователей длядальнейшая обработка / выполнение, поэтому, если пользователь, вышедший из системы автоматически, не должен быть доступным, является активным пользователем, но это так.
Если я вышел из системы вручную, он больше не отображается у активного пользователя,это означает, что ручной выход из системы работает хорошо, но автоматический выход из системы по-прежнему показывает пользователя как active
пользователя.
Вот как я получаю активных пользователей:
all_active_users = user_table.objects.filter(user_type='a', status=1, approval_status=1, is_active=True)
# further execution
Обновление: Я использую пользовательский режим для пользователя, который назван user_table
, и вот что я попробовал в соответствии с предложенным ответом:
def get_all_logged_in_users():
# Query all non-expired sessions
# use timezone.now() instead of datetime.now() in latest versions of Django
sessions = Session.objects.filter(expire_date__gte=timezone.now())
uid_list = []
# Build a list of user ids from that query
for session in sessions:
data = session.get_decoded()
uid_list.append(data.get('id', None))
# Query all logged in users based on id list
return user_table.objects.filter(id__in=uid_list)
он возвращает пустой набор запросов как: active drivers are: <QuerySet []>
даже пользователь типа driver
вошел в систему.
Как я могу преодолеть эту проблему, поэтому, когда пользователь автоматически вышел из системы, он не будет отображаться в active
пользователей.