【发布时间】:2019-02-19 08:20:06
【问题描述】:
我正在使用 django rest 框架来建模 api 视图。我有一个 API ModelViewSet 类,它有两个操作方法:list() 和 retrieve()
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 - 它调用 list 方法来缓存响应。 当 GET 请求被发送到 /en/api/v1/pair/ - 它调用retrieve 方法,该方法被修饰为 never_cache。
当 GET 请求发送到 /en/api/v1/pair/?name=random 时,我正在添加返回随机对的功能。 但是由于它调用list方法,所以返回会被缓存一段时间,并返回相同的响应一段时间。
当调用 /en/api/v1/pair/?name=random 端点时,在 list() 方法中不缓存响应的方法是什么,但它应该缓存列表方法中调用的任何其他内容。
谢谢!
【问题讨论】:
标签: python django api django-rest-framework django-2.1