gpt4 book ai didi

python - 基于query_params的列表方法中的Django rest框架缓存响应

转载 作者:行者123 更新时间:2023-12-03 21:19:32 26 4
gpt4 key购买 nike

我正在使用 django rest 框架来建模 api View 。我有一个 API ModelViewSet 类,它有两个操作方法:列表()检索()

检索()方法示例:

@method_decorator(never_cache)
def retrieve(self, request, *args, **kwargs):
# /en/api/v1/pair/<parameter> calls this method
...
return Response(some_data)

list() 方法示例:
@method_decorator(cache_page(settings.PAIR_CACHE_LIFETIME))
def list(self, request, *args, **kwargs):
# /en/api/v1/pair/, /en/api/v1/pair/?name=<parameter> calls this method
# /en/api/v1/pair/ and /en/api/v1/pair/?name=all - response SHOULD be cached
# /en/api/v1/pair/?name=random and /en/api/v1/pair/?name=CORRECT_PAIR_NAME - SHOULD NOT be cached
...
return Response(some_data)

当 GET 请求被发送到/en/api/v1/pair - 它调用被修饰为缓存响应的列表方法。
当 GET 请求被发送到/en/api/v1/pair/- 它调用被装饰为 never_cache 的检索方法。

我正在添加返回随机对的功能,当 获取 请求被发送到/en/api/v1/pair/?name=random。
但是当它调用 list 方法时,返回被缓存了一段时间并返回相同的响应一段时间。

中不缓存响应的方法是什么?列表()方法,当/en/api/v1/pair/?name=random 端点被调用时,但它应该缓存在 list 方法中调用的任何其他内容。

谢谢!

最佳答案

我做了

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

class MyViewSet(viewsets.ModelViewSet):
serializer_class = MySerializer

@method_decorator(cache_page(60*5)) # cache for 5 minutes
def list(self, request, format=None):
queryset = self.filter_queryset(self.get_queryset())

page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)

serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)

注意这里list的定义和 source是一样的,即我没改过,这里只是演示如何缓存。

关于python - 基于query_params的列表方法中的Django rest框架缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com