python - 在没有页面加载的情况下 session 超时时更新表记录

标签 python django python-3.x

  1. 已安装 pip install django-session-timeout
  2. 像这样更新 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/

相关文章:

Django - 表单验证错误

python - 在 Python 回溯中显示更多级别的异常

python - PyQt:如何在 Raspberry Pi 桌面启动时运行 GUI?

python - 模型 django 中唯一随机默认值的迁移问题

Python 脚本...类型错误 : 'method' object does not support item assignment

python - 在 Python 中解析文件时跳过一行?有什么简单/基本的方法吗?

python - 使用 psycopg2,如何获得 "INFO:"行?

python os.path.exists()对于存在的nfs挂载目录文件失败

python - 在Python中检查列表中的元素时循环

java - Android:如何导入 org.python ? Pickle(或 cPickle)怎么样?