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

Django只缓存没有GET或POST参数的页面?,django,caching,memcached,Django,Caching,Memcached,我正在阅读django的文档,我读了下面一行: 缓存中间件缓存没有GET或POST参数的每个页面 这是否意味着它不会缓存具有GET或POST参数的页面?如果这是真的,那么它看起来相当愚蠢,因为网站的大部分都有一些GET或POST参数。例如,分页非常常见。有人能澄清这一点吗 谢谢大家! 通常,如果应用程序设计正确,那么就没有使用GET或POST缓存页面的意义 使用POST的页面 POST数据通常是用户与表单交互的结果。这意味着,缓存POST数据可能会缓存删除用户或向数据库添加新记录的请求。这可不好

我正在阅读django的文档,我读了下面一行:

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

这是否意味着它不会缓存具有GET或POST参数的页面?如果这是真的,那么它看起来相当愚蠢,因为网站的大部分都有一些GET或POST参数。例如,分页非常常见。有人能澄清这一点吗


谢谢大家!

通常,如果应用程序设计正确,那么就没有使用GET或POST缓存页面的意义

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

使用GET的页面 至于GET参数,它们用于搜索页面,如:

example.com/search?query=i%20might%20be%20never%20repeated%20again
这样缓存页面没有多大意义——它们可能在生命周期中只呈现一次

走错路 但是,如果使用错误的方法,您将遇到问题:

example.com/viewprofile?userid=65
视图的参数应作为url的一部分传递:

example.com/viewprofile/65

完整url用于缓存密钥。如果我们看一看,有哪些依次调用。这将获取绝对url的MD5哈希,如活动语言所示

def _generate_cache_header_key(key_prefix, request):
    """Return a cache key for the header cache."""
    url = hashlib.md5(iri_to_uri(request.build_absolute_uri()).encode('ascii'))
    cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
        key_prefix, url.hexdigest())
    return _i18n_cache_key_suffix(request, cache_key)

我不能肯定我能回答你的问题。然而,django的设计主要围绕着避免传递参数的思想。您可以在urls.py中设置URL,它主要负责需要的参数。我以前使用过参数(主要用于jqgrid,因为插件需要它们),但在本例中,参数用于正在更改的数据,并且可能会因参数的不同而有很大差异。所以,也许事实表明拥有缓存并没有多大好处?谢谢你的评论。我明白你的意思。但是,即使是Django分页教程也使用GET参数。退房在本例中,Django使用“page”GET参数为下一页/上一页提供服务。我想我可以通过在URL中只使用正则表达式来欺骗Django,使其不得不使用参数,但是(1)正则表达式是一个婊子,(2)完全忽略HttpRequest对象似乎很愚蠢。谢谢是的,我支持你的(1)…但是当它起作用的时候,它是值得的。回顾你的URL.py文件,思考有时需要什么才能到达那里也很有趣:)@wibbe01:是的,当然:)我可能已经找到了答案。如果有人能证实,那就太好了。等我有时间的时候,我自己来试试。谢谢你的回复。我最终使用了模板内缓存来缓存第三方的东西,比如disks、FB、Twitter。到目前为止,我认为它工作正常。