我正在使用Memcached作为django应用程序的后端.这段代码在正常的django查询中运行良好:

def get_myobj():
        cache_key = 'mykey'
        result = cache.get(cache_key, None)
        if not result:
            result = Product.objects.all().filter(draft=False)
            cache.set(cache_key, result)
        return result

但与django-睡觉-framework接口调用配合使用时不起作用:

class ProductListAPIView(generics.ListAPIView):
    def get_queryset(self):
        product_list = Product.objects.all()
        return product_list
    serializer_class = ProductSerializer

我将try 提供缓存功能的DRF扩展:

https://github.com/chibisov/drf-extensions

但是GitHub上的构建状态目前显示"构建失败".

我的应用程序非常依赖api调用.有没有办法缓存这些电话?

非常感谢.

推荐答案

好的,那么,为了对您的查询集使用缓存:

class ProductListAPIView(generics.ListAPIView):
    def get_queryset(self):
        return get_myobj()
    serializer_class = ProductSerializer

不过,您可能希望在缓存集上设置一个超时(比如60秒):

cache.set(cache_key, result, 60)

如果要缓存整个视图,请执行以下操作:

from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page

class ProductListAPIView(generics.ListAPIView):
    serializer_class = ProductSerializer

    @method_decorator(cache_page(60))
    def dispatch(self, *args, **kwargs):
        return super(ProductListAPIView, self).dispatch(*args, **kwargs)

Django相关问答推荐

如何显示日期?

Django Admin中显示的DateField下面的小提示是什么?

Django Form初始值不在呈现上起作用

Django modelform在包含在另一个模板中时不呈现

Urls.py中路径**kwargs的Django翻译?

如何在Django管理自定义筛选器中包含自定义模型方法?

在 Django 4.1 中提交表单之前显示数据

如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

未为部署的 django rest 框架加载静态文件

Django中的 联合(Union) 和相交(Intersect)

Django JSONField 过滤

Django 1.9:字段与父模型中不存在的字段的字段冲突

Python / Django 中的 Unicode 与 UTF-8 混淆?

断开模型的信号并在 django 中重新连接

带有消息判断的 Django/Python assertRaises

在 Django 1.8 或更高版本中填充时出现Models aren't loaded yet"错误

PyCharm 代码判断提示找不到模板文件,如何解决?

在 Django 开发服务器中关闭静态文件的缓存

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

Django REST 框架中的每个字段权限