1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

magic-removal: Added 'never_cache' decorator that sets

'Expires' as a past date and max-age=0, and used it in the 
admin to prevent loss of data in the change_stage view.


git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2599 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Luke Plant 2006-03-30 21:40:36 +00:00
parent d4a6375fba
commit 9db4a5e5ed
3 changed files with 18 additions and 3 deletions

View File

@ -2,6 +2,7 @@ from django import forms, template
from django.conf import settings from django.conf import settings
from django.contrib.admin.filterspecs import FilterSpec from django.contrib.admin.filterspecs import FilterSpec
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.views.decorators.cache import never_cache
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied
from django.core.paginator import ObjectPaginator, InvalidPage from django.core.paginator import ObjectPaginator, InvalidPage
@ -394,7 +395,7 @@ def change_stage(request, app_label, model_name, object_id):
'is_popup': request.REQUEST.has_key('_popup'), 'is_popup': request.REQUEST.has_key('_popup'),
}) })
return render_change_form(model, manipulator, c, change=True) return render_change_form(model, manipulator, c, change=True)
change_stage = staff_member_required(change_stage) change_stage = staff_member_required(never_cache(change_stage))
def _nest_help(obj, depth, val): def _nest_help(obj, depth, val):
current = obj current = obj
@ -515,7 +516,7 @@ def delete_stage(request, app_label, model_name, object_id):
return render_to_response(["admin/%s/%s/delete_confirmation" % (app_label, opts.object_name.lower() ), return render_to_response(["admin/%s/%s/delete_confirmation" % (app_label, opts.object_name.lower() ),
"admin/%s/delete_confirmation" % app_label , "admin/%s/delete_confirmation" % app_label ,
"admin/delete_confirmation"], extra_context, context_instance=template.RequestContext(request)) "admin/delete_confirmation"], extra_context, context_instance=template.RequestContext(request))
delete_stage = staff_member_required(delete_stage) delete_stage = staff_member_required(never_cache(delete_stage))
def history(request, app_label, model_name, object_id): def history(request, app_label, model_name, object_id):
model = models.get_model(app_label, model_name) model = models.get_model(app_label, model_name)

View File

@ -80,6 +80,8 @@ def patch_response_headers(response, cache_timeout=None):
if not response.has_header('Expires'): if not response.has_header('Expires'):
expires = now + datetime.timedelta(0, cache_timeout) expires = now + datetime.timedelta(0, cache_timeout)
response['Expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S GMT') response['Expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S GMT')
if cache_timeout < 0:
cache_timeout = 0 # Can't have max-age negative
patch_cache_control(response, max_age=cache_timeout) patch_cache_control(response, max_age=cache_timeout)
def patch_vary_headers(response, newheaders): def patch_vary_headers(response, newheaders):

View File

@ -13,8 +13,9 @@ account on caching -- just like the middleware does.
import re import re
from django.utils.decorators import decorator_from_middleware from django.utils.decorators import decorator_from_middleware
from django.utils.cache import patch_cache_control from django.utils.cache import patch_cache_control, patch_response_headers
from django.middleware.cache import CacheMiddleware from django.middleware.cache import CacheMiddleware
import datetime
cache_page = decorator_from_middleware(CacheMiddleware) cache_page = decorator_from_middleware(CacheMiddleware)
@ -31,3 +32,14 @@ def cache_control(**kwargs):
return _cache_controller 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)
patch_response_headers(response, cache_timeout=-1)
return response
return _wrapped_view_func