Django:如果用户没有注销,我如何查看用户的上次活动时间?

时间:2013-02-04 11:14:03

标签: python django middleware

django的用户模型有一个last_login字段,如果所有用户每次离开网站时都要注销,那就太棒了,但如果不这样做会怎么样?

如何跟踪从未注销的用户及其在网站上的活动?

2 个答案:

答案 0 :(得分:24)

您需要在用户个人资料(或自定义用户模型)中包含last_activity字段。该字段将在每个请求时更新。要实现这一目标,您需要拥有自定义中间件:

简档/ middleware.py:

from django.utils import timezone

from myproject.profiles.models import Profile


class UpdateLastActivityMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        assert hasattr(request, 'user'), 'The UpdateLastActivityMiddleware requires authentication middleware to be installed.'
        if request.user.is_authenticated():
            Profile.objects.filter(user__id=request.user.id) \
                           .update(last_activity=timezone.now())

在您的设置文件中添加此中间件:

MIDDLEWARE_CLASSES = (
    # other middlewares
    'myproject.profiles.middleware.UpdateLastActivityMiddleware',
)

答案 1 :(得分:2)

我知道这个问题很旧...而且肯定已经解决了... 但是这是我的贡献... 在新版本的django中,您可以使用:

“会话时间”->在配置文件中使用。 “ settings.py”

如果用户关闭浏览器,则会话结束,必须再次登录...
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

如果用户未关闭浏览器,则可以设置会话的时间限制...
SESSION_COOKIE_AGE = 60 * 60 

对于“ SESSION_COOKIE_AGE”,如果我没记错的话,它的定义以秒为单位。 您可以看到更多here ... 推荐的读物也是Django自己的documentation about sessions ...