From dc12582b6f984a365b2c18dd3e306ae8d2a7a3a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9F=B9=E6=B7=87?= Date: Tue, 25 Oct 2016 16:35:36 +0800 Subject: [PATCH] added:add multiple cache backend support --- fancy_cache/middleware.py | 17 +++++++++-------- fancy_tests/tests/settings.py | 4 ++++ fancy_tests/tests/test_views.py | 17 ++++++++++++++++- fancy_tests/tests/views.py | 4 ++++ 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/fancy_cache/middleware.py b/fancy_cache/middleware.py index c78e0c4..97e8303 100644 --- a/fancy_cache/middleware.py +++ b/fancy_cache/middleware.py @@ -3,7 +3,7 @@ from django.core.exceptions import ImproperlyConfigured from django.conf import settings -from django.core.cache import cache, DEFAULT_CACHE_ALIAS +from django.core.cache import caches, DEFAULT_CACHE_ALIAS from django.utils.encoding import iri_to_uri from django.utils.cache import ( get_cache_key, @@ -128,7 +128,7 @@ def process_response(self, request, response): if self.remember_all_urls: self.remember_url(request, cache_key, timeout) - cache.set(cache_key, response, timeout) + self.cache.set(cache_key, response, timeout) if self.post_process_response_always: response = self.post_process_response_always( @@ -140,9 +140,9 @@ def process_response(self, request, response): def remember_url(self, request, cache_key, timeout): url = request.get_full_path() - remembered_urls = cache.get(REMEMBERED_URLS_KEY, {}) + remembered_urls = self.cache.get(REMEMBERED_URLS_KEY, {}) remembered_urls[url] = cache_key - cache.set( + self.cache.set( REMEMBERED_URLS_KEY, remembered_urls, LONG_TIME @@ -171,9 +171,9 @@ def process_request(self, request): else: cache_key += '__hits' cache_key = md5(cache_key) - if cache.get(cache_key) is None: - cache.set(cache_key, 0, LONG_TIME) - cache.incr(cache_key) + if self.cache.get(cache_key) is None: + self.cache.set(cache_key, 0, LONG_TIME) + self.cache.incr(cache_key) return response def _process_request(self, request): @@ -226,7 +226,7 @@ def _process_request(self, request): # No cache information available, need to rebuild. return None - response = cache.get(cache_key, None) + response = self.cache.get(cache_key, None) if response is None: request._cache_update_cache = True # No cache information available, need to rebuild. @@ -339,3 +339,4 @@ def __init__( cache_alias = settings.CACHE_MIDDLEWARE_ALIAS self.cache_alias = cache_alias + self.cache = caches[self.cache_alias] diff --git a/fancy_tests/tests/settings.py b/fancy_tests/tests/settings.py index a2ff5c5..7ea7abe 100644 --- a/fancy_tests/tests/settings.py +++ b/fancy_tests/tests/settings.py @@ -16,6 +16,10 @@ 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake' + }, + 'second_backend': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + 'LOCATION': 'unique-snowflake' } } diff --git a/fancy_tests/tests/test_views.py b/fancy_tests/tests/test_views.py index cf47c51..f948308 100644 --- a/fancy_tests/tests/test_views.py +++ b/fancy_tests/tests/test_views.py @@ -2,7 +2,7 @@ import re from nose.tools import eq_, ok_ from django.test.client import RequestFactory -from django.core.cache import cache +from django.core.cache import cache, caches from fancy_cache.memory import find_urls from . import views @@ -190,3 +190,18 @@ def test_remember_stats_all_urls_looong_url(self): ok_(match[0].startswith('/something/really')) eq_(match[2]['hits'], 1) eq_(match[2]['misses'], 1) + + def test_cache_backends(self): + request = self.factory.get('/anything') + + response = views.home7(request) + eq_(response.status_code, 200) + ok_(re.findall('Random:\w+', response.content.decode("utf8"))) + random_string_1 = re.findall('Random:(\w+)', response.content.decode("utf8"))[0] + + # clear second cache backend + caches['second_backend'].clear() + response = views.home7(request) + eq_(response.status_code, 200) + random_string_2 = re.findall('Random:(\w+)', response.content.decode("utf8"))[0] + ok_(random_string_1 != random_string_2) diff --git a/fancy_tests/tests/views.py b/fancy_tests/tests/views.py index 99c5d97..bfd2a24 100644 --- a/fancy_tests/tests/views.py +++ b/fancy_tests/tests/views.py @@ -56,3 +56,7 @@ def home5bis(request): @cache_page(60, remember_stats_all_urls=True, remember_all_urls=True) def home6(request): return _view(request) + +@cache_page(60, cache='second_backend') +def home7(request): + return _view(request)