1
我已經爲Django的cache_page修飾器編寫了一個包裝器,以便可以將測試函數傳遞給它。由此,例如只有未經過身份驗證的用戶才能看到緩存版本。這是封裝的代碼:Django 1.8中的cache_page導致'str'對象不支持項目分配錯誤
from functools import wraps
from django.views.decorators.cache import cache_page
from django.utils.decorators import available_attrs
def passes_test_cache(test_func, timeout=None, using=None, key_prefix=None):
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
if test_func(request):
return cache_page(timeout, cache=using, key_prefix=key_prefix)(view_func)(request, *args, **kwargs)
else:
return view_func(request, *args, **kwargs)
return _wrapped_view
return decorator
它一直很好地工作到Django 1.7.x.然而,隨着更新的Django 1.8,我發現了以下錯誤:
Internal Server Error:/
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 223, in get_response
response = middleware_method(request, response)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/sessions/middleware.py", line 55, in process_response
httponly=settings.SESSION_COOKIE_HTTPONLY or None)
File "/usr/local/lib/python2.7/dist-packages/django/http/response.py", line 235, in set_cookie
self.cookies[key] = value
TypeError: 'str' object does not support item assignment
看來東西是錯誤的餅乾字典,這似乎是這裏的字符串。任何想法如何解決這個問題?
我喜歡這種簡單的解決方案!謝謝:-)作爲一個方面說明:它不是必須被清除的本地瀏覽器緩存,而是我們的memcached實例。 –