【发布时间】:2013-02-04 11:14:02
【问题描述】:
django 的 User 模型有一个 last_login 字段,如果所有用户每次离开站点时都要注销,这很好,但如果他们不这样做呢?
我如何跟踪从未注销的用户及其在网站上的活动?
【问题讨论】:
标签: python django middleware
django 的 User 模型有一个 last_login 字段,如果所有用户每次离开站点时都要注销,这很好,但如果他们不这样做呢?
我如何跟踪从未注销的用户及其在网站上的活动?
【问题讨论】:
标签: python django middleware
您需要在用户配置文件(或自定义用户模型)中有last_activity 字段。该字段将在每次请求时更新。为此,您需要自定义中间件:
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 中,您可以使用:
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
如果用户没有关闭浏览器,您可以为会话设置时间限制...
SESSION_COOKIE_AGE = 60 * 60
如果我没记错的话,对于“SESSION_COOKIE_AGE”,它是以秒为单位定义的。 你可以看到更多here... 推荐阅读也是django自己的documentation about sessions...
【讨论】: