mli*_*ner 5 python django pickle django-rest-framework
更新:请参阅下面的“更好的解决方案”。
这个难倒我了。当我调用由 Django REST Framework 生成的 HTML 页面时,它可以工作。当我第二次、第三次、第四次调用它时,我得到:
[26/Oct/2015 15:14:42]"GET /api/rest/v3/dockets/ HTTP/1.1" 500 92424
Internal Server Error: /api/rest/v3/dockets/
Traceback (most recent call last):
File "/home/mlissner/.virtualenvs/courtlistener/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 108, in get_response
response = middleware_method(request)
File "/home/mlissner/.virtualenvs/courtlistener/local/lib/python2.7/site-packages/django/middleware/cache.py", line 134, in process_request
response = self.cache.get(cache_key, None)
File "/home/mlissner/.virtualenvs/courtlistener/local/lib/python2.7/site-packages/django/core/cache/backends/locmem.py", line 54, in get
return pickle.loads(pickled)
TypeError: __new__() takes exactly 3 arguments (2 given)
Run Code Online (Sandbox Code Playgroud)
与我从 Django 获得的 99% 的堆栈跟踪不同,这个堆栈跟踪根本没有提到我的代码,而且似乎只是来自 Django 本身的代码。
我正在使用开发服务器、Django 1.8.7、Django REST Framework 3.2.3 和 Python 2.7。
我的中间件设置是:
MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
Run Code Online (Sandbox Code Playgroud)
我只在查看 Django REST Framework 页面时看到过这一点。有任何想法吗?
CACHE设置,使其使用 Redis 而不是LocMemCache. 我认为这可能会有所帮助,因为评论中有人说将其更改为有FileBasedCache帮助。尽管将其设置为 do,但对 redis 的更改本身并没有帮助DummyCache。django-redis-cache允许您设置不同版本的泡菜,因此我对此进行了修补,因为有一个链接暗示了泡菜版本相关。起初,这似乎没有效果,但我在django-redis(“PICKLE_VERSION 似乎不起作用”)中提交了一个错误,他们很快就修复了。一旦修复,我将 PICKLE_VERSION 设置为 1,问题就解决了。
我还在DRF 中提交了一个错误,看看是否有更好的方法来解决这个问题。但是,我不确定该错误是否存在于我的代码中或 Django 本身中。
我似乎是解决方法的大师。但好消息是,这是Django Rest Framework 中的一个错误,已修复,并将在 3.3.2 中发布(希望如此)。