Python 在没有页面加载的情况下会话超时时更新表记录 已安装的pip安装django会话超时
像这样更新setting.pyPython 在没有页面加载的情况下会话超时时更新表记录 已安装的pip安装django会话超时,python,django,python-3.x,Python,Django,Python 3.x,像这样更新setting.py MIDDLEWARE_CLASSES = [ # ... 'django.contrib.sessions.middleware.SessionMiddleware', 'caccounts.middleware.SessionTimeoutMiddleware', # custom middleware # ... ] 并加入: SESSION_EXPIRE_SECONDS = 3600 # 1 hour SESSION_EXPIRE_AFTER_LAST
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()
仅当我加载页面时才更新其状态,但我想在超时会话时自动更新状态据我所知,您需要这样编写中间件:
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
FYI您需要在settings.py中的
django\u session\u timeout.middleware.SessionTimeoutMiddleware'
之前放置此自定义中间件
,因为SessionTimeoutMiddleware
会在超时后刷新会话。谢谢您提供的信息,但状态仅在我登录而不是会话时更新超时。我需要在会话到期时自动显示状态。我认为,为此,您需要编写某种cronjob。你可以看看芹菜