我在视图中使用django中的DatabaseCache时遇到问题。看起来我无法访问数据库缓存,并且在缓存中存储新值并不会发生。
在 settings.py 中,我已经设置了缓存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'caches',
'TIMEOUT': 300,
}
}
在我的应用帐户中,我的 views.py 中包含以下内容:
from rest_framework.response import Response
from rest_framework.decorators import api_view
from accounts.serializers import UserSerializer
from django.core.cache import cache, caches
@api_view(['GET'])
def current_user(request):
print("all caches")
print(caches.all())
cache_value = cache.get("foo")
print("cache_value")
print(cache_value)
cache.set("foo", "some cached value", 24*60*60)
cache_value_after_set = cache.get("foo")
print("cache_value_after_set")
print(cache_value_after_set)
serializer = UserSerializer(request.user)
return Response(serializer.data)
问题在于缓存似乎没有“坚持”#34;。第一次尝试执行cache.get(" foo")它显然会返回None。当我执行cache.get(" foo")时 - 在我完成cache.set之后 - 它返回它应该的值。但是当我第二次调用视图时,cache.get(" foo")返回None。
caches.all()的输出是一个空字典,所以我猜 settings.py 中的缓存设置并没有以某种方式用于 views.py
第一次和第二次调用视图后的输出是:
all caches
dict_values([])
cache_value
None
cache_value_after_set
some cached value
和
all caches
dict_values([])
cache_value
some cached value
cache_value_after_set
some cached value
即。结果相同,没有设置缓存。
真正奇怪的是,当使用 ./ manage.py shell 时缓存可以工作,我可以将数据存储在数据库中,即使caches.all()有时返回一个空字典,有时也不会。当我这样做时,我可以看到缓存出现在mysql的缓存表中。
我正在运行Django 1.11
你对此有什么想法吗?
提前致谢!