临时禁用Django缓存

46 投票
5 回答
31059 浏览
提问于 2025-04-17 03:23

如何在每次检查出代码时禁用Django的缓存?

在Django 1.3之前,我可以通过在settings.py中导入的settings_local.py文件里设置 CACHE_BACKEND = None 来禁用本地开发环境的缓存。因为settings_local.py文件不会被SVN(一个版本控制工具)记录,所以我可以确保我的本地环境不会缓存,而不需要担心修改settings.py中的缓存设置。

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

5 个回答

7

在使用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()

14

我在设置中使用这个,这样如果我想测试一下已经部署的缓存(在这个例子中是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',
        }
}
91

虚拟缓存(用于开发) - 这个功能实现了缓存的接口,但实际上并不进行缓存。你可以在开发或测试的网站上使用它,这样可以减少缓存的影响,也可以避免因缓存引起的错误。

最后,Django 提供了一个“虚拟”缓存,它实际上并不进行缓存——它只是实现了缓存的接口,但不执行任何操作。

这在你有一个使用了强大缓存的生产网站,但在开发或测试环境中又不想使用缓存的情况下非常有用。这样你就不需要修改代码来处理不同的情况。要启用虚拟缓存,只需像这样设置 BACKEND:

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

撰写回答