Fixed #27211 -- Made UpdateCacheMiddleware include caching headers for "304 Not Modified" responses.

This commit is contained in:
Rinat Khabibiev 2016-09-12 17:19:36 +03:00 committed by Tim Graham
parent 9459ec82aa
commit f9702977b7
2 changed files with 18 additions and 3 deletions

17
tests/cache/tests.py vendored
View file

@ -22,7 +22,9 @@ from django.core.cache import (
)
from django.core.cache.utils import make_template_fragment_key
from django.db import connection, connections
from django.http import HttpRequest, HttpResponse, StreamingHttpResponse
from django.http import (
HttpRequest, HttpResponse, HttpResponseNotModified, StreamingHttpResponse,
)
from django.middleware.cache import (
CacheMiddleware, FetchFromCacheMiddleware, UpdateCacheMiddleware,
)
@ -2147,6 +2149,19 @@ class CacheMiddlewareTest(SimpleTestCase):
# Inserting a CSRF cookie in a cookie-less request prevented caching.
self.assertIsNone(cache_middleware.process_request(request))
def test_304_response_has_http_caching_headers_but_not_cached(self):
original_view = mock.Mock(return_value=HttpResponseNotModified())
view = cache_page(2)(original_view)
request = self.factory.get('/view/')
# The view shouldn't be cached on the second call.
view(request).close()
response = view(request)
response.close()
self.assertEqual(original_view.call_count, 2)
self.assertIsInstance(response, HttpResponseNotModified)
self.assertIn('Cache-Control', response)
self.assertIn('Expires', response)
@override_settings(
CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix',