gpt4 book ai didi

django - 如何获取经过身份验证的用户列表?

转载 作者:行者123 更新时间:2023-11-28 19:35:46 34 4
gpt4 key购买 nike

我想显示经过身份验证的用户列表。

关于文档:http://docs.djangoproject.com/en/dev/topics/auth/

class models.User
is_authenticated()¶
Always returns True. This is a way to tell if the user has been authenticated. ...

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

{% if user.is_authenticated %} {% endif %}

但是我没有找到获取认证用户列表的方法。

有什么想法吗?

最佳答案

按照 rz 的回答,您可以查询未过期 session 的 Session 模型,然后将 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设置,但我知道情况并非总是如此。

关于django - 如何获取经过身份验证的用户列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723052/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com