3

我是 Django 的新手,正在尝试建立一个博客来记录用户登录的时间和用户注销的时间。

我猜这会出现在视图中,但我不知道如何解决这个问题。

我将如何发送用户登录数据库的时间?

任何提示和指导将不胜感激。

4

1 回答 1

4

auth.model.User.last_login假设您使用的是 Django 的内置身份验证,您可以使用它来获取用户的最后登录时间:

user = User.objects.get(username='johndoe')
last_login = user.last_login

如果您想将此数据存储在User表格以外的其他位置,您只需将其插入last_login您想要的表格即可。否则,它已经在models.User.

至于记录注销,您可以使用以下视图进行logout查看:

from django.contrib.auth import logout
from django.utils import timezone

def logout_view(request):
    logout(request)
    logout_time = timezone.now()
    # Now save your logout_time to the table you want
    # Redirect to a success page.

或者,您可以利用 Django 的user_logged_out信号(在 Django 1.3+ 中可用)来记录每次用户注销时的最后一次注销时间:

from django.contrib.auth.signals import user_logged_out

def update_last_logout(sender, user, **kwargs):
    """
    A signal receiver which updates the last_logout date for
    the user logging out.
    """
    user.last_logout = timezone.now()
    user.save(update_fields=['last_logout'])
user_logged_out.connect(update_last_logout)

您可以将其放在models.py文件的底部。请注意,上面的解决方案假定您将扩展User模型以包含last_logout字段。如果你不确定你将如何去做,你可以从这里开始:Django Tip 5: Extending contrib.auth.models.User

事实上,第二种方法正是 Django 更新last_login的方式Usermodels.py


参考:

  1. 官方 Django 文档last_login
  2. 扩展contrib.auth.models.User
于 2012-09-18T00:43:02.547 回答