【问题标题】:Does Django cache a POST request (and it's parameters)?Django 是否缓存 POST 请求(及其参数)?
【发布时间】:2020-01-26 05:18:52
【问题描述】:

我有一个 DRF 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 请求?

【问题讨论】:

  • 我不明白你为什么想要这个。 POST 旨在更新数据库中的某些内容。缓存它是没有意义的。
  • POST 也用于像create a search db query 这样的目的,这是一个只读操作。在这种情况下,每个 POST 操作都是幂等的,并且可以从缓存中受益。
  • 不,不应该。那应该是 GET。
  • 并非如此。这取决于。

标签: python django http post caching


【解决方案1】:

来自 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 始终是一个新请求。

【讨论】:

    猜你喜欢
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2021-08-25
    • 2014-11-25
    • 2012-02-19
    • 2016-12-26
    相关资源
    最近更新 更多