Я хотел бы отобразить список аутентифицируемых пользователей.
На документации: http://docs.djangoproject.com/en/dev/topics/auth/
модели класса. Пользователь
is_authenticated () ¶
Всегда возвращает True. Это - способ сказать, аутентифицировался ли пользователь...
Можно знать на шаблонной стороне, текущий Пользователь, аутентифицируется или нет:
{%, если пользовательский is_authenticated %} {% endif %}
Но я не сделал нашел путь получением списка аутентифицируемых пользователей.
Какая-либо идея?
Следуя ответу rz, вы можете запросить модель Session
для сеансов без истекшего срока, а затем преобразовать данные сеанса в пользователей. Получив это, вы можете превратить его в тег шаблона, который может отображать список на любой странице.
(Все это не проверено, но, надеюсь, будет близко к работе).
Получить всех зарегистрированных пользователей ...
from django.contrib.auth.models import User
from django.contrib.sessions.models import Session
from django.utils import timezone
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('_auth_user_id', None))
# Query all logged in users based on id list
return User.objects.filter(id__in=uid_list)
Используя это, вы можете создать простой тег шаблона включения ...
from django import template
from wherever import get_all_logged_in_users
register = template.Library()
@register.inclusion_tag('templatetags/logged_in_user_list.html')
def render_logged_in_user_list():
return { 'users': get_all_logged_in_users() }
logged_in_user_list.html
{% if users %}
<ul class="user-list">
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
{% endif %}
Затем на своей главной странице вы можете просто использовать его там, где вы например ...
{% load your_library_name %}
{% render_logged_in_user_list %}
РЕДАКТИРОВАТЬ
Для тех, кто говорит о 2-недельной постоянной проблеме, я предполагаю, что любой, кто хочет иметь список "активных пользователей", будет использовать SESSION_EXPIRE_AT_BROWSER_CLOSE
, хотя я понимаю, что это не всегда так.
Я знаю, что нет простого встроенного способа сделать то, что вы хотите. Я бы попробовал комбинацию истекающих сеансов и фильтрации на last_login. Может быть, даже написать для этого кастомный менеджер.