2015-04-12 39 views
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 

看來東西是錯誤的餅乾字典,這似乎是這裏的字符串。任何想法如何解決這個問題?

回答

3

Cookie的工作方式在1.8版中已更改,但您的緩存頁仍然返回1.7格式。只需清除緩存即可解決問題。

+0

我喜歡這種簡單的解決方案!謝謝:-)作爲一個方面說明:它不是必須被清除的本地瀏覽器緩存,而是我們的memcached實例。 –

相關問題