暂时禁用Django缓存

时间:2011-09-29 20:15:32

标签: python django

如何在每次结帐时禁用Django缓存?

在Django 1.3之前,我可以通过在settings.py导入的settings_local.py中指定CACHE_BACKEND = None来禁用本地开发结帐的缓存。 SVN忽略了settings_local.py,因此我总是可以确保我的本地环境没有缓存,而不必担心在settings.py中修改缓存参数。

现在,使用Django 1.3和新的CACHES = {...}结构,设置CACHES = NoneCACHES['default']['BACKEND'] = None会导致Django窒息,设置CACHES = {}似乎仍然启用基本缓存。

5 个答案:

答案 0 :(得分:56)

https://docs.djangoproject.com/en/1.3/topics/cache/

虚拟缓存(用于开发) - 这实际上并不缓存,因此您可以在开发方面使用它。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

答案 1 :(得分:9)

我在我的设置中使用它,所以它更灵活一点我想测试部署缓存的使用情况(在本例中为memcache)

TEST_MEMCACHE = False
if not DEBUG or TEST_MEMCACHE:
    CACHES = {
        'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        }
    }
else:
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        }
}

答案 2 :(得分:4)

多个缓存的解决方案,并且您想要禁用所有缓存:

if True:
    CACHES = {
        k : {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}
        for k,v in CACHES.iteritems()
    }

解决方案如果要禁用某些缓存,可能有所帮助:

if True:
    disable_names = [ 'cache_name' ]
    for name in disable_names:
        CACHES[name] = {'BACKEND' : 'django.core.cache.backends.dummy.DummyCache',}

答案 3 :(得分:2)

为此,您可以使用“虚拟”缓存后端。 Django带有一个“虚拟”缓存,实际上并不缓存 - 它只是实现缓存接口而不做任何事情。

以下是old stylenew style配置格式。

  1. 旧式

    要激活虚拟缓存,请按以下方式设置CACHE_BACKEND:

    CACHE_BACKEND = 'dummy://'

  2. 新款式

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        }
    }
    

答案 4 :(得分:1)

虽然使用DRF,但在某些视图上,我将启用使用django.views.decorators.cache.cache_page进行缓存。接受的答案对我不起作用,我诉诸于在拆除时清除缓存

from django.core.cache import cache
from rest_framework.test import APITestCase

class SomeTestCase(APITestCase):

    def tearDown(self):
        cache.clear()