我为 Django 的 cache_page 装饰器编写了一个包装器,以便可以将测试函数传递给它。由此,例如只有未经身份验证的用户才能看到缓存的版本。这是包装器的代码:
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
cookie 字典似乎有问题,这里似乎是一个字符串。知道如何解决这个问题吗?
最佳答案
Cookie 的工作方式在 1.8 中已更改,但您的缓存页面仍返回 1.7 格式。只需清除缓存即可修复它。
关于python - Django 1.8中的cache_page导致 'str'对象不支持项目分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595136/