如何在 Django 中获得当前登录用户的用户 ID?

如何获取当前登录用户的 ID?

models.py:

class Game(models.model):
name = models.CharField(max_length=255)
owner = models.ForeignKey(User, related_name='game_user', verbose_name='Owner')

views.py:

gta = Game.objects.create(name="gta", owner=?)
302384 次浏览

首先确保将 SessionMiddlewareAuthenticationMiddleware中间件添加到 MIDDLEWARE_CLASSES设置中。

当前的 user位于 request对象中,可以通过以下方式获得:

def sample_view(request):
current_user = request.user
print current_user.id

request.user将为您提供一个表示当前登录用户的 User对象。如果用户当前没有登录,则 request.user将被设置为 AnonymousUser的实例。你可以用字段 is_authenticated来区分它们,像这样:

if request.user.is_authenticated:
# Do something for authenticated users.
else:
# Do something for anonymous users.

假设你指的是姜戈的 认证用户,在你看来:

def game(request):
user = request.user


gta = Game.objects.create(name="gta", owner=user)

您可以使用以下代码访问已登录的 Current 用户:

request.user.id

我使用 ajax 视图编写了这篇文章,但是给出了当前登录和退出用户的列表,这是一个更具扩展性的答案。

is_authenticated属性总是为我的用户返回 True,我想这是意料之中的,因为它只检查匿名用户,但是如果你说开发一个聊天应用程序,你需要登录用户显示,这证明是无用的。

这将检查过期的会话,然后根据解码的 _auth_user_id属性确定它们属于哪个用户:

def ajax_find_logged_in_users(request, client_url):
"""
Figure out which users are authenticated in the system or not.
Is a logical way to check if a user has an expired session (i.e. they are not logged in)
:param request:
:param client_url:
:return:
"""
# query non-expired sessions
sessions = Session.objects.filter(expire_date__gte=timezone.now())
user_id_list = []
# build list of user ids from query
for session in sessions:
data = session.get_decoded()
# if the user is authenticated
if data.get('_auth_user_id'):
user_id_list.append(data.get('_auth_user_id'))


# gather the logged in people from the list of pks
logged_in_users = CustomUser.objects.filter(id__in=user_id_list)
list_of_logged_in_users = [{user.id: user.get_name()} for user in logged_in_users]


# Query all logged in staff users based on id list
all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
logged_out_users = list()
# for some reason exclude() would not work correctly, so I did this the long way.
for user in all_staff_users:
if user not in logged_in_users:
logged_out_users.append(user)
list_of_logged_out_users = [{user.id: user.get_name()} for user in logged_out_users]


# return the ajax response
data = {
'logged_in_users': list_of_logged_in_users,
'logged_out_users': list_of_logged_out_users,
}
print(data)


return HttpResponse(json.dumps(data))


在模板之内

这是我通常如何获得当前登录用户和他们的 ID 在我的模板。

<p>Your Username is : \{\{user}} </p>
<p>Your User Id is  : \{\{user.id}} </p>

这是我通常如何获得当前登录用户和他们的 ID 在我的模板。

<p>Your Username is : \{\{user|default: Unknown}} </p>
<p>Your User Id is  : \{\{user.id|default: Unknown}} </p>

只需在 profile.HTML 模板上添加一个 HTML 标记段落,

<p>User-ID: {% user.id %}</p>