django使用1.9之前版本 1.11中间件使用的装饰器(闭包)的形式,登陆信息保存在django缓存中,session保存在MySQL数据库
# coding=utf-8
from django.core.cache import cache
from django.contrib.sessions.models import Session
class OnlyOne_User_Login(object):
def process_request(self, request):
user_id = request.user.id
session_key = request.session.session_key
delete_session(user_id, session_key)
return None
def process_response(self, request, response):
user_id = request.user.id
session_key = request.session.session_key
res = set_cache(user_id, session_key)
return response
def delete_session(user_id, session_key):
"""
删除原来登陆用户的session
:param user_id:
:param session_key:
:return:
"""
if user_id is None:
return
cache_session_key = cache.get(user_id)
if cache_session_key == session_key or cache_session_key is None:
return
session = Session.objects.filter(session_key=cache_session_key).first()
if session:
session.delete()
session.save()
cache.delete(user_id)
return
def set_cache(user_id, session_key):
"""
如果值存储,则返回False,否则返回True。
:param user_id:
:param session_key:
:return:
"""
cache_session_key = cache.get(user_id)
# print(cache.get(user_id), 'q')
if cache_session_key:
return
res = cache.set(user_id, session_key, 30 * 60)
# print(cache.get(user_id), 'hou')
return res