如何获取通过身份验证的用户列表?

class models.User

is_authenticated()¶

始终返回True。这是一种判断用户是否已通过身份验证的方法。...

你可以在模板方面知道当前用户是否已通过身份验证:

{%如果user.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() }

logging_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 %}

以上是 如何获取通过身份验证的用户列表? 的全部内容, 来源链接: utcz.com/qa/415701.html

回到顶部