- 已安装 pip install django-session-timeout
像这样更新 setting.py
MIDDLEWARE_CLASSES = [ # ... 'django.contrib.sessions.middleware.SessionMiddleware', 'caccounts.middleware.SessionTimeoutMiddleware', # custom middleware # ... ]
同时添加:
SESSION_EXPIRE_SECONDS = 3600 # 1 hour
SESSION_EXPIRE_AFTER_LAST_ACTIVITY = True
我在自定义中间件中编写了一些代码,如下所示
current_user = request.user
user = User.objects.get(pk=current_user.id)
user.is_online = False
user.save()
只有当我加载页面时才更新状态,但我想在超时 session 时自动更新状态
最佳答案
据我所知,你需要这样写你的中间件:
class CustomMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if not hasattr(request, 'session') or request.session.is_empty():
return
init_time = request.session.setdefault(SESSION_TIMEOUT_KEY, time.time())
expire_seconds = getattr(
settings, 'SESSION_EXPIRE_SECONDS', settings.SESSION_COOKIE_AGE)
session_is_expired = time.time() - init_time > expire_seconds
current_user = request.user
user = User.objects.get(pk=current_user.id)
if session_is_expired:
user.is_online = False
user.save()
# put next block of code if necessary
# else:
# if user.is_online == False:
# user.is_online = True
# user.save()
response = self.get_response(request)
return response
仅供引用您需要将此 CustomMiddleware
放在 settings.py 中的 'django_session_timeout.middleware.SessionTimeoutMiddleware'
之前因为 SessionTimeoutMiddleware
在超时后刷新 session 。
关于python - 在没有页面加载的情况下 session 超时时更新表记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743964/