Django Rest框架:Pickle响应

Django Rest框架:Pickle响应,django,django-rest-framework,django-redis,Django,Django Rest Framework,Django Redis,我正在尝试构建一个自定义版本,在这个版本中,我对缓存键有更多的控制权,但我甚至无法使用响应的基本缓存: from django.core.cache import cache from rest_framework import viewsets from rest_framework.response import Response from app import models class BaseViewSet(viewsets.GenericViewSet): queryset

我正在尝试构建一个自定义版本,在这个版本中,我对缓存键有更多的控制权,但我甚至无法使用响应的基本缓存:

from django.core.cache import cache
from rest_framework import viewsets
from rest_framework.response import Response

from app import models

class BaseViewSet(viewsets.GenericViewSet):
    queryset = models.Items.objects.all()

    def get_queryset(self):
        return models.Items.objects.all()

    def list(self, request, **kwargs):
        response = Response({})
        cache.set('test', response, 10)
        return response
其中my
settings.py的相关部分设置为:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": f"redis://127.0.0.1:6729/1",
    },
}
当我尝试调用端点时,我得到:

django.template.response.ContentNotRenderedError: The response content must be rendered before it can be pickled.
然后,如果我将行更改为:

cache.set('test', response.render(), 10)
我得到:

AssertionError: .accepted_renderer not set on Response
(如果我设置渲染器,它会抱怨接受的媒体,那么上下文最终会失败,出现
TypeError:“bytes”对象不可调用

尽管API调用本身在没有缓存的情况下运行良好


实际上工作正常,因此我知道可以缓存响应,但我无法找出缺少的内容。

我通过让视图返回
django.http.JsonResponse
而不是
rest\u framework.response.response
对象解决了这个问题。问题在于rest_framework
Response
与mediatype无关,据我所知,它依赖于在视图离开处理程序后,将呈现程序和接受的媒体值设置在视图调用链的下游。因为
JsonResponse
只处理json,所以它不必经历这个问题。

也有同样的问题