Python Django:如果用户没有';你不能注销吗?

Python Django:如果用户没有';你不能注销吗?,python,django,middleware,Python,Django,Middleware,django的用户模型有一个last\u login字段,如果所有用户每次离开站点时都要注销,这很好,但是如果他们不这样做呢 如何跟踪从未注销的用户何时在站点上进行活动?您需要在用户配置文件(或自定义用户模型)中设置最后一次活动字段。此字段将在每次请求时更新。要实现这一点,您需要定制中间件: profiles/middleware.py: from django.utils import timezone from myproject.profiles.models import Profil

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


如何跟踪从未注销的用户何时在站点上进行活动?

您需要在用户配置文件(或自定义用户模型)中设置
最后一次活动
字段。此字段将在每次请求时更新。要实现这一点,您需要定制中间件:

profiles/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',
)

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

“会话时间”->在配置文件中使用。“settings.py” 如果用户关闭浏览器,会话将结束,必须重新登录。。。
SESSION\u EXPIRE\u在浏览器上\u CLOSE=True
如果用户未关闭浏览器,则可以设置会话的时间限制。。。
SESSION\u COOKIE\u AGE=60*60
如果我没记错的话,对于“SESSION\u COOKIE\u AGE”,它是以秒为单位定义的。 你可以看到更多。。。
推荐的读取也是django自己的…

这似乎会导致大量写入数据库,可能会影响性能。对于更有效率的事情,考虑将最后一个活动写入缓存,然后定期进入数据库。我相信这是可能的。虽然这回答了问题,但当用户数量增加时,这破坏了我的Django安装。我花了几个小时才弄明白,所以我希望这篇文章能为大家节省一些时间!