随心一记

一二三四五,上山打老鼠


  • 首页

  • 归档

  • 标签
ywcsb

ywcsb

游戏可以不玩,小说不能不看。

153 日志
3 分类
42 标签
RSS
GitHub 知乎 随心一记
Links
  • 随心一记
  • 追梦人物的
  • MSDN

django 同一个用户只登录一个客户端.

发表于 2021-05-24 | 阅读 997 | 分类于 Python |

自定义中间件

在项目下创建一个session_cache.py文件

from django.utils.deprecation import MiddlewareMixin
from django.core.cache import cache


class SessionCacheMiddleware(MiddlewareMixin):
    def __init__(self, get_response=None):
        super().__init__(get_response)
        self.SCM = 'SessionCacheMiddleware:'
        self.KEY = 'django.contrib.sessions.cache'

    def process_request(self, request):
      # 验证session是否存在,验证通过则判断session是否是同一个用户同一个客户端登录
        try:
            session_key = self.KEY + request.session.session_key # 本次登录的session_key
            _auth_user_id = self.SCM + request.session.get('_auth_user_id', None) # 组合用户id
        except TypeError:
            return
        else:
            _auth_user_id_key = cache.get(_auth_user_id, None)
            # 判断用户id在缓存中是否存在
            if _auth_user_id_key:
              # 判断缓存中session名称和用户id记录的名称是否相同,如果相同直接返回一个空值不做任何操作。
                if _auth_user_id_key in session_key:
                    time = request.session.get_expiry_age() #获取
                    cache.touch(_auth_user_id, time) # 更新过期时间session过期时间
                else:
                    cache.delete(_auth_user_id_key) # 删除上一次用户登录的session
                    cache.set(_auth_user_id, session_key) # 为session 和同一个用户名做标记
            else:
                cache.set(_auth_user_id, session_key)

编辑settings.py文件加入刚刚自定义中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
         # 下面这个就是我们定义好的中间件了
    'qincheng.session_cache.SessionCacheMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
觉得不错,支持一下!
geerniya WeChat Pay

微信打赏

geerniya Alipay

支付宝打赏

# Python # Django
Django rest_framwork中ApiView实现分页
网络工具使用MTR

发表评论

共 0 条评论

    暂无评论
© 2018 - 2022 ywcsb
冀ICP备17022045号-1
Supported by 腾讯云