python - Django 1.8中的cache_page导致 'str'对象不支持项目分配错误

标签 python django caching cookies

我为 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/

相关文章:

python - 由于 ubuntu 服务器上的 PYTHONPATH,使用 pip 导入时出错

django - 如何将 Django 模型的一个字段的值设置为等于其他 Django 模型的其他字段

javascript - OpenLayers 3 可以使用 WebSQL 或 IndexedDB 来缓存 map 瓦片吗

java - 创建/设置来自 Neo4j 中参数对象的属性

python - 在 python 中使用 Expand 创建具有多个配对变量的字符串 (snakemake)

django - 设置 django celery 运行实例时出错

django - 怎么: django_manage in ansible with Python3

javascript - 停止 Chrome 缓存我的 JS 文件

java - 如何在tomcat/java中仅在特定时期内存储一个值

python - 在 PySparkense_rank() 中将 null 值保留为 null