14

django 的 User 模型有一个last_login字段,如果所有用户每次离开站点时都要注销,这很好,但如果他们不这样做呢?

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

4

2 回答 2

26

您需要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',
)
于 2013-02-04T11:24:53.307 回答
3

我知道这个问题很老......当然它已经解决了......但这是我的贡献......在新版本的 django 中,您可以使用:

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

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

如果用户没有关闭浏览器,您可以为会话设置时间限制...
SESSION_COOKIE_AGE = 60 * 60 

对于“SESSION_COOKIE_AGE”,如果我没记错的话,它是在几秒钟内定义的。你可以在这里看到更多......推荐阅读也是django自己的关于会话的文档......

于 2020-06-24T23:53:00.227 回答