我正在http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs阅读django文档,并阅读以下内容:
缓存中间件缓存每个没有GET或POST参数的页面。
这是否意味着它不会缓存具有GET或POST参数的页面?如果这是真的,那么它似乎相当愚蠢,因为网站的很大一部分有一些GET或POST参数。例如,分页是非常常见的。任何人都可以澄清这个吗?
谢谢!
答案 0 :(得分:2)
通常,如果您的应用程序设计正确,则无法通过GET或POST缓存页面。
POST数据通常是用户与表单交互的结果。这意味着,缓存POST数据可能会缓存删除用户的请求,或者将新记录添加到数据库。这不会很好。
对于GET参数,它们用于搜索页面,如:
example.com/search?query=i%20might%20be%20never%20repeated%20again
没有太多意义来缓存这样的页面 - 它们可能在生命周期中只呈现一次。
但是,如果您以错误的方式使用GET,则会遇到问题:
example.com/viewprofile?userid=65
视图的参数应作为url:
的一部分传递example.com/viewprofile/65
答案 1 :(得分:0)
在Django 1.10中,完整的URL用于缓存键。如果我们查看django.utils.cache.py,则有get_cache_key,后者依次调用_generate_cache_header_key。这也将md5用于绝对网址,如活动语言所示。
def _generate_cache_header_key(key_prefix, request):
"""Returns a cache key for the header cache."""
url = hashlib.md5(force_bytes(iri_to_uri(request.build_absolute_uri())))
cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
key_prefix, url.hexdigest())
return _i18n_cache_key_suffix(request, cache_key)