求助:Django视图中DatabaseCache无法存储值且无法访问
排查Django DatabaseCache无法访问/存储的问题
我来帮你梳理下可能的问题点,按步骤排查应该能解决:
首先,先确认缓存表是否已经创建——这是使用DatabaseCache最容易踩的坑!Django不会自动生成缓存对应的数据库表,你需要手动执行命令:
python manage.py createcachetable
执行完成后,去数据库里确认是否生成了名为caches的表(对应你settings里LOCATION配置的表名),如果这个表不存在,缓存肯定无法正常工作。
接下来,检查视图里的缓存使用代码是否正确。你需要先导入Django的缓存模块,再用标准API操作,示例代码如下:
from django.core.cache import cache from rest_framework.response import Response from rest_framework.decorators import api_view @api_view(['GET']) def test_cache_operation(request): # 存储缓存值 cache.set('sample_key', 'cached_content', timeout=300) # 读取缓存值 cached_data = cache.get('sample_key') return Response({'result': cached_data})
如果你的视图里没正确导入cache,或者调用方法有误(比如拼写错误),也会导致存储/读取失败。
然后,验证settings配置是否真正生效。有时候可能在环境特定的配置文件(比如production.py)里重新定义了CACHES,覆盖了默认配置。你可以在shell里快速验证:
python manage.py shell >>> from django.core.cache import cache >>> cache.__class__.__module__ # 正常应该输出 'django.core.cache.backends.db'
如果输出不是这个,说明你的缓存配置没生效,得检查settings的加载顺序和其他配置文件的覆盖情况。
另外,检查数据库权限:确保你DATABASES配置里的数据库用户,对caches表拥有SELECT、INSERT、UPDATE、DELETE权限,权限不足也会导致缓存操作失败。
最后,建议先在shell里做极简测试,排除视图逻辑的干扰:
python manage.py shell >>> from django.core.cache import cache >>> cache.set('test_key', 'hello_cache') >>> cache.get('test_key') # 正常应该返回 'hello_cache'
如果shell里操作正常,那问题大概率出在你的视图代码逻辑里;如果shell里也失败,就回到前面的步骤检查表创建、配置和权限。
内容的提问来源于stack exchange,提问作者Samuel Skånberg
相关产品推荐
相关产品推荐

