# 马莹:导入微信机器人(werobot)的会话存储基类,用于自定义会话存储方式 from werobot.session import SessionStorage # 马莹:导入微信机器人的JSON处理工具,用于数据的序列化和反序列化 from werobot.utils import json_loads, json_dumps # 马莹:导入当前Django项目中djangoblog应用的缓存工具 from djangoblog.utils import cache # 马莹:定义基于Memcache的会话存储类,继承自werobot的SessionStorage基类 class MemcacheStorage(SessionStorage): # 马莹:初始化方法,设置缓存键的前缀,默认为'ws_' def __init__(self, prefix='ws_'): self.prefix = prefix # 马莹:存储缓存键的前缀 self.cache = cache # 马莹:引用导入的缓存工具实例 # 马莹:用于检查缓存存储是否可用的属性 @property def is_available(self): value = "1" # 马莹:定义测试值 # 马莹:尝试设置一个测试键值对到缓存中 self.set('checkavaliable', value=value) # 马莹:通过比较设置的值和获取的值是否一致,判断缓存是否可用 return value == self.get('checkavaliable') # 马莹:生成带前缀的缓存键名,避免键名冲突 def key_name(self, s): return '{prefix}{s}'.format(prefix=self.prefix, s=s) # 马莹:从缓存中获取指定ID对应的会话数据 def get(self, id): id = self.key_name(id) # 马莹:生成带前缀的缓存键 # 马莹:从缓存中获取数据,若不存在则返回空字典的JSON字符串 session_json = self.cache.get(id) or '{}' # 马莹:将JSON字符串反序列化为Python字典并返回 return json_loads(session_json) # 马莹:将会话数据存入缓存 def set(self, id, value): id = self.key_name(id) # 马莹:生成带前缀的缓存键 # 马莹:将Python对象序列化为JSON字符串后存入缓存 self.cache.set(id, json_dumps(value)) # 马莹:从缓存中删除指定ID的会话数据 def delete(self, id): id = self.key_name(id) # 马莹:生成带前缀的缓存键 # 马莹:从缓存中删除该键对应的记录 self.cache.delete(id)