2011-04-21 68 views
3

我在http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs阅读Django文档和我读到下面一行:Django只缓存没有GET或POST参数的页面?

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

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

谢谢!

+1

我:

的观点
example.com/viewprofile?userid=65 

参数应为URL的一部分传递我不确定我能回答你的问题。然而,django的设计主要围绕避免传递参数的想法。你在你的urls.py中设置你的urls,这很大程度上需要参数。我之前使用过参数(主要是针对jqgrid,因为插件需要它们),但在这种情况下,这是针对正在改变的数据,并且可能因参数不同而有很大差异。所以也许这个事实说明拥有缓存不会有什么好处? – wilbbe01 2011-04-21 00:43:22

+0

感谢您的评论。我明白你的意思了。但是,即使Django分页教程也使用GET参数。请参阅[http://docs.djangoproject.com/en/1.3/topics/pagination/](http://docs.djangoproject.com/en/1.3/topics/pagination/)。在这个例子中,Django使用“page”GET参数来提供下一页/上一页。我想我可以欺骗Django只需要在URL中使用正则表达式,但(1)正则表达式是一个婊子,(2)它完全忽略HttpRequest对象似乎很愚蠢。谢谢! – rabbid 2011-04-21 00:59:00

+1

是的,我第二你的(1)....但是当它工作的时候,它会得到回报。回顾一下你的urls.py文件并思考有时需要做些什么才是有趣的:)。 – wilbbe01 2011-04-21 01:04:17

回答

2

通常,如果您的应用程序的设计是正确的,就没有使用GET或POST缓存页面的感觉。

使用POST的页面

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

对于GET参数

页,他们是为了用于搜索页面,就像那些:

example.com/search?query=i%20might%20be%20never%20repeated%20again 

有缓存的页面一样,没有太大的意义 - 他们可能在生命中只能渲染一次。

错误的方式

但是,你会如果你使用GET错误的方式获得问题:

example.com/viewprofile/65 
+0

感谢您的回复。我最终使用了模板内缓存来缓存Disqus,FB,Twitter等第三方内容。我认为到目前为止它工作正常。 – rabbid 2011-04-21 10:34:18