summaryrefslogtreecommitdiffstats
path: root/webapp/django/views/decorators/cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/django/views/decorators/cache.py')
-rw-r--r--webapp/django/views/decorators/cache.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/webapp/django/views/decorators/cache.py b/webapp/django/views/decorators/cache.py
new file mode 100644
index 0000000000..8b620c1345
--- /dev/null
+++ b/webapp/django/views/decorators/cache.py
@@ -0,0 +1,47 @@
+"""
+Decorator for views that tries getting the page from the cache and
+populates the cache if the page isn't in the cache yet.
+
+The cache is keyed by the URL and some data from the headers. Additionally
+there is the key prefix that is used to distinguish different cache areas
+in a multi-site setup. You could use the sites.get_current().domain, for
+example, as that is unique across a Django project.
+
+Additionally, all headers from the response's Vary header will be taken into
+account on caching -- just like the middleware does.
+"""
+
+try:
+ from functools import wraps
+except ImportError:
+ from django.utils.functional import wraps # Python 2.3, 2.4 fallback.
+
+from django.utils.decorators import decorator_from_middleware
+from django.utils.cache import patch_cache_control, add_never_cache_headers
+from django.middleware.cache import CacheMiddleware
+
+cache_page = decorator_from_middleware(CacheMiddleware)
+
+def cache_control(**kwargs):
+
+ def _cache_controller(viewfunc):
+
+ def _cache_controlled(request, *args, **kw):
+ response = viewfunc(request, *args, **kw)
+ patch_cache_control(response, **kwargs)
+ return response
+
+ return wraps(viewfunc)(_cache_controlled)
+
+ return _cache_controller
+
+def never_cache(view_func):
+ """
+ Decorator that adds headers to a response so that it will
+ never be cached.
+ """
+ def _wrapped_view_func(request, *args, **kwargs):
+ response = view_func(request, *args, **kwargs)
+ add_never_cache_headers(response)
+ return response
+ return wraps(view_func)(_wrapped_view_func)