[Django]-Temporarily Disabling Django Caching

88đź‘Ť

âś…

Dummy Caching (for development) – this implements the cache interface, but doesn’t actually cache so you could have it on your development/testing site to reduce caching and also prevent errors from caching, if those should arise.

Finally, Django comes with a "dummy" cache that doesn’t actually cache – it just implements the cache interface without doing anything.

This is useful if you have a production site that uses heavy-duty caching in various places but a development/test environment where you don’t want to cache and don’t want to have to change your code to special-case the latter. To activate dummy caching, set BACKEND like so:

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

14đź‘Ť

I use this in my settings, so it’s a bit more flexible i case I do want to test the usage of the deployed caching (in this case 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',
        }
}

7đź‘Ť

Whilst using DRF, on some views, I would enable caching using django.views.decorators.cache.cache_page. The accepted answer did not work for me and I resorted to clearing the cache on tear down

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

class SomeTestCase(APITestCase):

    def tearDown(self):
        cache.clear()

6đź‘Ť

Solution for multiple caches, and you want to disable all of them:

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

Solution if you want to disable some caches, may help:

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

3đź‘Ť

For that purpose you can use “dummy” cache backend. Django comes with a “dummy” cache that doesn’t actually cache — it just implements the cache interface without doing anything.

Here are the old style and new style configuration formats.

  1. old style

    To activate dummy caching, set CACHE_BACKEND like so:

    CACHE_BACKEND = 'dummy://'

  2. new style

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

Leave a comment