From 5e97ac435125d0ad7ada0232f512003e3a98b8c0 Mon Sep 17 00:00:00 2001 From: zxc <3425933825@qq.com> Date: Wed, 22 Oct 2025 15:07:53 +0800 Subject: [PATCH] Update MemcacheStorage.py --- .../servermanager/MemcacheStorage.py | 62 +++++++++++++++---- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/src/DjangoBlog-master/servermanager/MemcacheStorage.py b/src/DjangoBlog-master/servermanager/MemcacheStorage.py index 38a7990..7025caa 100644 --- a/src/DjangoBlog-master/servermanager/MemcacheStorage.py +++ b/src/DjangoBlog-master/servermanager/MemcacheStorage.py @@ -5,28 +5,66 @@ from djangoblog.utils import cache class MemcacheStorage(SessionStorage): + """ + 基于Memcache的微信WeRoBot会话存储实现,用于在微信机器人开发中持久 持久化存储用户会话数据(如对话状态、临时信息等) + """ + def __init__(self, prefix='ws_'): - self.prefix = prefix - self.cache = cache + """ + 初始化会话存储 + :param prefix: 缓存键的前缀,用于区分不同类型的缓存数据,默认'ws_'(WeChat Session缩写) + """ + self.prefix = prefix # 缓存键前缀 + self.cache = cache # 引入Django项目中的缓存实例(通常配置为Memcache) @property def is_available(self): - value = "1" - self.set('checkavaliable', value=value) - return value == self.get('checkavaliable') + """ + 检查缓存存储是否可用 + :return: 布尔值,True表示可用,False表示不可用 + """ + test_value = "1" + # 尝试写入测试数据 + self.set('check_available', value=test_value) + # 读取测试数据并对比,验证缓存读写功能是否正常 + return test_value == self.get('check_available') def key_name(self, s): - return '{prefix}{s}'.format(prefix=self.prefix, s=s) + """ + 生成带前缀的缓存键名,避免不同类型数据的键冲突 + :param s: 原始键名(如用户ID) + :return: 带前缀的完整键名(如'ws_user123') + """ + return f'{self.prefix}{s}' def get(self, id): - id = self.key_name(id) - session_json = self.cache.get(id) or '{}' + """ + 从缓存中获取会话数据 + :param id: 会话ID(通常为用户标识,如OpenID) + :return: 反序列化后的会话数据字典 + """ + # 生成带前缀的键名 + cache_key = self.key_name(id) + # 从缓存读取数据,默认返回空JSON字符串'{}' + session_json = self.cache.get(cache_key) or '{}' + # 将JSON字符串反序列化为Python字典 return json_loads(session_json) def set(self, id, value): - id = self.key_name(id) - self.cache.set(id, json_dumps(value)) + """ + 将会话数据存入缓存 + :param id: 会话ID + :param value: 要存储的会话数据(字典类型) + """ + cache_key = self.key_name(id) + # 将数据字典序列化为JSON字符串后存入缓存 + self.cache.set(cache_key, json_dumps(value)) def delete(self, id): - id = self.key_name(id) - self.cache.delete(id) + """ + 从缓存中删除会话数据 + :param id: 会话ID + """ + cache_key = self.key_name(id) + # 删除指定键的缓存数据 + self.cache.delete(cache_key)