我想显示经过身份验证的用户列表.
文档上:http://docs.djangoproject.com/en/dev/topics/auth/
类模型.用户
IS_AUTIFIATED()Ó
始终返回True.这是一种告诉用户是否已通过身份验证的方法....
您可以在模板端知道current用户是否已通过身份验证:
{%if user.is_Authenticated%} {%endif%}
但是我没有找到获取认证用户列表的方法.
有什么 idea 吗?
我想显示经过身份验证的用户列表.
文档上:http://docs.djangoproject.com/en/dev/topics/auth/
类模型.用户
IS_AUTIFIATED()Ó
始终返回True.这是一种告诉用户是否已通过身份验证的方法....
您可以在模板端知道current用户是否已通过身份验证:
{%if user.is_Authenticated%} {%endif%}
但是我没有找到获取认证用户列表的方法.
有什么 idea 吗?
按照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 %}
EDIT
对于那些谈论持续两周的问题的人,我假设任何想要拥有"活跃用户"类型的列表的人都会使用SESSION_EXPIRE_AT_BROWSER_CLOSE
的设置,尽管我认识到情况并不总是这样.