Django中dir()无法显示cache对象的缓存方法,如何查看?
Django缓存对象的方法无法通过
dir()显示的解决办法 原因
从django.core.cache导入的cache是CacheHandler类的实例,它本质是一个代理对象——通过__getattr__魔术方法,将所有缓存操作方法动态转发给实际的缓存后端(比如本地内存缓存LocMemCache、Redis缓存RedisCache等)。而Python的dir()函数默认只会返回对象自身定义的属性和方法,不会包含通过__getattr__动态代理的方法,所以你看不到set()、get()这些缓存方法。
解决方法
方法1:获取实际的缓存后端实例后调用dir()
直接获取cache代理的真实缓存对象,再对其执行dir(),就能看到所有缓存方法:
from django.core.cache import cache # 获取实际的缓存后端实例 actual_cache = cache._get_cache() # 查看所有方法 print(dir(actual_cache))
执行后,输出里就会包含set()、get()、touch()等你需要的缓存操作方法。
方法2:直接查看缓存后端类的定义
根据项目settings.py中CACHES配置的后端类型,导入对应类并查看方法:
# 示例:本地内存缓存后端 from django.core.cache.backends.locmem import LocMemCache print(dir(LocMemCache)) # 若使用Redis缓存,导入对应类 # from django.core.cache.backends.redis import RedisCache # print(dir(RedisCache))
方法3:使用inspect模块枚举可用方法
借助inspect模块筛选出所有可调用的方法,包含动态代理的缓存操作方法:
import inspect from django.core.cache import cache # 获取所有可调用的属性 available_methods = [name for name, _ in inspect.getmembers(cache, predicate=inspect.ismethod)] print(available_methods)
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

