我有一个DRF API,该API实现了允许GET
和POST
调用的视图:
@api_view([
'GET',
'POST',
])
@cache_page(timeout=60 * 10)
def my_view(request):
# do stuff
我注意到:
GET
请求将按预期进行缓存。
POST
请求根本不会被缓存。
问题:
这是想要的还是我做错了什么?
如果这按预期工作,...我如何让Django也缓存POST
请求?
答案 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始终是一个新请求。