Django是否缓存POST请求(及其参数)?

时间:2019-09-26 00:40:48

标签: python django http post caching

我有一个DRF API,该API实现了允许GETPOST调用的视图:

@api_view([
    'GET',
    'POST',
])
@cache_page(timeout=60 * 10)
def my_view(request):
  # do stuff

我注意到:

  1. GET请求将按预期进行缓存。

  2. POST请求根本不会被缓存。

问题:

  1. 这是想要的还是我做错了什么?

  2. 如果这按预期工作,...我如何让Django也缓存POST请求?

1 个答案:

答案 0 :(得分:2)

摘自Django源代码中的类文档:

  

有关缓存工作原理的更多详细信息:   *仅缓存状态码为200的GET或HEAD请求。    链接:https://github.com/django/django/blob/master/django/middleware/cache.py

此限制的原因可能是因为GET请求应该是幂等的,而POST请求却不是,因此缓存POST请求通常是没有意义的。 这是一个很好地解释这个概念的问题:What is idempotency in HTTP methods?

Django是开源的,因此您可以随时扩展缓存机制来实现此功能,但是它可能会使您的API用户感到困惑,因为他们希望POST始终是一个新请求。