我正在使用 django rest 框架来建模 api 视图。我有一个 API ModelViewSet 类,它有两个操作方法:list()和retrieve()
检索()方法示例:
@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 的检索方法。
当GET请求发送到/en/api/v1/pair/?name=random时,我添加了返回随机对的功能。但是当它调用 list 方法时,返回会被缓存一段时间并返回相同的响应一段时间。
当调用/en/api/v1/pair/?name=random端点时,不在list()方法中缓存响应的方法是什么,但它应该缓存在 list 方法中调用的任何其他内容。
谢谢!