mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Added a CACHE_MIDDLEWARE_ANONYMOUS_ONLY setting which makes the cache ignore pages served to authenticated users. Fixes #1509 (thanks, Matt).
Also added a FAQ entry about using this setting to avoid caching of the admin interface. git-svn-id: http://code.djangoproject.com/svn/django/trunk@3395 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -10,6 +10,11 @@ class CacheMiddleware(object):
|
||||
|
||||
Only parameter-less GET or HEAD-requests with status code 200 are cached.
|
||||
|
||||
If CACHE_MIDDLEWARE_ANONYMOUS_ONLY is set to True, only anonymous requests
|
||||
(i.e. those node made by a logged in user) will be cached. This is a
|
||||
simple and effective way of avoiding the caching of the Django admin (and
|
||||
any other user-specific content).
|
||||
|
||||
This middleware expects that a HEAD request is answered with a response
|
||||
exactly like the corresponding GET request.
|
||||
|
||||
@@ -23,13 +28,17 @@ class CacheMiddleware(object):
|
||||
This middleware also sets ETag, Last-Modified, Expires and Cache-Control
|
||||
headers on the response object.
|
||||
"""
|
||||
def __init__(self, cache_timeout=None, key_prefix=None):
|
||||
def __init__(self, cache_timeout=None, key_prefix=None, cache_anonymous_only=None):
|
||||
self.cache_timeout = cache_timeout
|
||||
if cache_timeout is None:
|
||||
self.cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
|
||||
self.key_prefix = key_prefix
|
||||
if key_prefix is None:
|
||||
self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
|
||||
if cache_anonymous is None:
|
||||
self.cache_anonymous_only = settings.get('CACHE_MIDDLEWARE_ANONYMOUS_ONLY', False)
|
||||
else:
|
||||
self.cache_anonymous_only = cache_anonymous_only
|
||||
|
||||
def process_request(self, request):
|
||||
"Checks whether the page is already cached and returns the cached version if available."
|
||||
@@ -37,6 +46,10 @@ class CacheMiddleware(object):
|
||||
request._cache_update_cache = False
|
||||
return None # Don't bother checking the cache.
|
||||
|
||||
if self.cache_anonymous_only and request.user.is_authenticated():
|
||||
request._cache_update_cache = False
|
||||
return None # Don't cache requests from authenticated users.
|
||||
|
||||
cache_key = get_cache_key(request, self.key_prefix)
|
||||
if cache_key is None:
|
||||
request._cache_update_cache = True
|
||||
|
||||
Reference in New Issue
Block a user