根据标题,在Django中,我应该何时何地存储有关用户访问的信息?我已经使用Django内置信号记录用户登录/注销,但是如果用户已登录该计算机该怎么办?我怎么能发现这个?
答案 0 :(得分:3)
我想在我的Django项目上做同样的事情。问题是last_login
变量没有帮助,因为它在用户登录时更新,如果用户缓存他的会话,变量将永远不会更新。
一种解决方案是创建一个装饰器,并在您的视图中使用它。这样,如果用户使用您的站点,变量将会更新。
这是一个如何做的例子:
from functools import wraps
from django.contrib.auth.models import User
from django.utils import timezone
def W_update_user_login(func):
@wraps(func)
def wrapper(*args, **kwargs):
request = args[0]
if request.user.is_authenticated():
user=User.objects.get(username=request.user)
user.last_login=timezone.now()
user.save()
return func(*args, **kwargs)
return wrapper
如果您将以前的代码添加到views.py
文件中,您将能够装饰您的功能。例如:
@W_update_user_login
def your_view_function(request):
#
# your normal code..
#
return HttpResponse....