Changelog

全名 页面 提交时间 (Ascending) Unsort 内容 注释 ...
ySJ 2.0/chapter15/#314 2010-04-22 17:23:28 默认情况下,增加或减少的值是1。可以用参数来制定其他值。
ySJ 2.0/chapter15/#315 2010-04-22 17:24:07 如果尝试增减不存在的键值会抛出ValueError。
ySJ 2.0/chapter15/#318 2010-04-22 17:24:17 注意
ySJ 2.0/chapter15/#320 2010-04-22 17:25:21 <literal>incr()</literal>/<literal>decr()</literal>方法不是原子操作。
ySJ 2.0/chapter15/#321 2010-04-22 17:27:03 在支持原子增减的缓存后台上(最著名的是memcached),增减操作才是原子的。
ySJ 2.0/chapter15/#321 2010-04-22 17:27:28 在支持原子增减的缓存后端上(最著名的是memcached),增减操作才是原子的。
ySJ 2.0/chapter15/#322 2010-04-22 17:28:27 然而,如果后端并不原生支持增减操作,也可以通过取值/更新两步操作来实现。
ySJ 2.0/chapter15/#328 2010-04-23 09:20:06 上游缓存。
ySJ 2.0/chapter15/#358 2010-04-23 09:45:45 缺省情况下,Django 的缓存系统使用所请求的路径(比如:<literal>"/stories/2005/jun/23/bank_robbed/"</literal> )来创建其缓存键。这意味着每次请求都会使用同样的缓存版本,不考虑才客户端cookie和语言配置的不同。
ySJ 2.0/chapter15/#359 2010-04-23 09:48:15 除非你使用<literal>Vary</literal>头部通知缓存机制页面输出要依据请求头里的cookie,语言等的设置而不同。
ySJ 2.0/chapter15/#353 2010-04-23 09:48:28 使用 Vary头部
ySJ 2.0/chapter15/#355 2010-04-23 09:48:37 <literal>Vary</literal> 头部定义了缓存机制在构建其缓存键值时应当将哪个请求头标考虑在内。
ySJ 2.0/chapter15/#361 2010-04-23 09:48:57 要在 Django 完成这项工作,可使用便利的 <literal>vary_on_headers</literal> 视图装饰器,如下所示:
ySJ 2.0/chapter15/#364 2010-04-23 09:51:02 在这种情况下,缓存机制(如 Django 自己的缓存中间件)将会为每一个单独的用户浏览器缓存一个独立的页面版本。
ySJ 2.0/chapter15/#366 2010-04-23 09:52:41 使用 <literal>vary_on_headers</literal> 装饰器而不是手动设置 <literal>Vary</literal> 头部(使用像 <literal>response['Vary'] = 'user-agent'</literal> 之类的代码)的好处是修饰器在(可能已经存在的) <emphasis>Vary</emphasis> 之上进行 <literal>添加</literal> ,而不是从零开始设置,且可能覆盖该处已经存在的设置。
ySJ 2.0/chapter15/#374 2010-04-23 09:54:31 由于根据 cookie 而区分对待是很常见的情况,因此有 <literal>vary_on_cookie</literal> 装饰器。
ySJ 2.0/chapter15/#381 2010-04-23 10:05:45 该函数设置或增加 Vary header ,例如:
ySJ 2.0/chapter15/#380 2010-04-23 10:05:59 你也可以直接使用帮助函数:<literal>django.utils.cache.patch_vary_headers</literal>
ySJ 2.0/chapter15/#386 2010-04-23 10:06:50 控制缓存:
ySJ 2.0/chapter15/#387 2010-04-23 10:07:01 使用其它头部
ySJ 2.0/chapter15/#389 2010-04-23 10:07:58 关于缓存剩下的问题是数据的隐私性以及在级联缓存中数据应该在何处储存的问题。
ySJ 2.0/chapter15/#399 2010-04-23 10:10:37 例如:
ySJ 2.0/chapter15/#402 2010-04-23 10:12:23 该修饰器负责在后台发送相应的 HTTP 头部。
ySJ 2.0/chapter15/#407 2010-04-23 10:15:33 定义页面可以被缓存的最大时间。
ySJ 2.0/chapter15/#410 2010-04-23 10:17:07 (一些缓存即便在服务器页面发生变化的情况下仍然会传送所缓存的内容,只因为缓存拷贝没有过期。)
ySJ 2.0/chapter15/#416 2010-04-23 10:18:25 <literal>cache_control()</literal> 中,任何合法的<literal>Cache-Control</literal> HTTP 指令都是有效的。下面是完整列表:
ySJ 2.0/chapter15/#434 2010-04-23 10:19:05 缓存中间件已经使用 <literal>CACHE_MIDDLEWARE_SETTINGS</literal> 设置设定了缓存头部 max-age 。
ySJ 2.0/chapter15/#435 2010-04-23 10:19:39 如果你在cache_control修饰器中使用了自定义的max_age,该修饰器将会取得优先权,该头部的值将被正确地被合并。
ySJ 2.0/chapter15/#437 2010-04-23 10:22:04 如果你想用头部完全禁掉缓存,<literal>django.views.decorators.cache.never_cache</literal>装饰器可以添加确保响应不被缓存的头部信息。
ySJ 2.0/chapter15/#438 2010-04-23 10:25:09 例如:
ySJ 2.0/chapter15/#445 2010-04-23 10:26:13 <literal>django.middleware.http.ConditionalGetMiddleware</literal> 为现代浏览器增加了有条件的,基于 <literal>ETag</literal><literal>Last-Modified</literal> 头标的GET响应的相关支持。
ySJ 2.0/chapter15/#451 2010-04-23 10:28:22 如果使用缓存中间件,注意在<literal>MIDDLEWARE_CLASSES</literal>设置中正确配置。
ySJ 2.0/chapter15/#452 2010-04-23 10:30:17 因为缓存中间件需要知道哪些头部信息由哪些缓存区来区分。
ySJ 2.0/chapter15/#453 2010-04-23 10:31:26 中间件总是尽可能得想<literal>Vary</literal>响应头中添加信息。
ySJ 2.0/chapter15/#455 2010-04-23 10:33:26 <literal>UpdateCacheMiddleware</literal>在相应阶段运行。因为中间件是以相反顺序运行的,所有列表顶部的中间件反而<emphasis>last</emphasis>在相应阶段的最后运行。
ySJ 2.0/chapter15/#456 2010-04-23 10:35:12 所有,你需要确保<literal>UpdateCacheMiddleware</literal>排在任何可能往<emphasis>Vary</emphasis>头部添加信息的中间件<literal>之前</literal>
ySJ 2.0/chapter15/#457 2010-04-23 10:36:36 下面的中间件模块就是这么做的:
ySJ 2.0/chapter15/#461 2010-04-23 10:37:06 添加 <literal>Accept-Encoding</literal><literal>GZipMiddleware</literal>
ySJ 2.0/chapter15/#457 2010-04-23 10:37:20 下面的中间件模块就是这样的:
ySJ 2.0/chapter15/#463 2010-04-23 10:38:25 添加<literal>Accept-Language</literal><literal>LocaleMiddleware</literal>
ySJ 2.0/chapter15/#465 2010-04-23 10:41:11 另一方面,<literal>FetchFromCacheMiddleware</literal>在请求阶段运行,这时中间件循序执行,所以列表顶端的项目会<emphasis>首先</emphasis>执行。
ySJ 2.0/chapter15/#466 2010-04-23 10:43:12 <literal>FetchFromCacheMiddleware</literal>也需要在会修改<literal>Vary</literal>头部的中间件之后运行,所以<literal>FetchFromCacheMiddleware</literal>必须放在它们<emphasis>后面</emphasis>
ySJ 2.0/chapter15/#470 2010-04-23 10:44:48 Django捆绑了一系列可选的方便特性。
ySJ 2.0/chapter15/#471 2010-04-23 10:45:53 我们已经介绍了一些:
ySJ 2.0/chapter15/#473 2010-04-23 10:46:17 下一章中,我们将讲述Django中其他的子框架。
ySJ 2.0/chapter15/#472 2010-04-23 10:47:07 admin站点(第六章)和session/user框架(第十四章)。
ySJ 2.0/chapter16/#5 2010-04-23 10:48:13 安装Python的同时会安装好大量的标准软件包,这样 你可以立即使用而不用自己去下载。
ySJ 2.0/chapter16/#11 2010-04-23 10:54:16 Django的标准库存放在 <literal>django.contrib</literal> 包中。每个子包都是一个独立的附加功能包。
ySJ 2.0/chapter16/#12 2010-04-23 10:57:16 这些子包一般是互相独立的,不过有些<literal>django.contrib</literal>子包需要依赖其他子包。
ySJ 2.0/chapter16/#16 2010-04-23 11:00:33 <literal>django.contrib</literal> 开发包共有的特性是:
« < 84 85 86 87 88 89 90 > » 96 pages