Django只缓存没有GET或POST参数的页面?

时间:2011-04-21 00:34:34

标签: django caching memcached

我正在http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs阅读django文档,并阅读以下内容:

  

缓存中间件缓存每个没有GET或POST参数的页面。

这是否意味着它不会缓存具有GET或POST参数的页面?如果这是真的,那么它似乎相当愚蠢,因为网站的很大一部分有一些GET或POST参数。例如,分页是非常常见的。任何人都可以澄清这个吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

通常,如果您的应用程序设计正确,则无法通过GET或POST缓存页面。

使用POST的页面

POST数据通常是用户与表单交互的结果。这意味着,缓存POST数据可能会缓存删除用户的请求,或者将新记录添加到数据库。这不会很好。

使用GET的页面

对于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)