ySJ
|
2.0/chapter16/#47 |
2010-04-23 12:47:21
|
<literal>formtools</literal>:一些列处理表单通用模式的高级库。
|
|
ySJ
|
2.0/chapter16/#48 |
2010-04-23 11:22:55
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#45 |
2010-04-23 11:22:35
|
参见后面标题为“Flatpages”的小节。
|
|
ySJ
|
2.0/chapter16/#44 |
2010-04-23 11:22:27
|
<literal>flatpages</literal> : 一个在数据库中管理单一HTML内容的模块。
|
|
ySJ
|
2.0/chapter16/#42 |
2010-04-23 11:22:02
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#41 |
2010-04-23 11:21:36
|
<literal>databrowse</literal>:帮助你浏览数据的Django应用。
|
|
ySJ
|
2.0/chapter16/#39 |
2010-04-23 11:21:02
|
见后面标题为"CSRF 防御"的小节。
|
|
ySJ
|
2.0/chapter16/#38 |
2010-04-23 11:20:48
|
<literal>csrf</literal> : 这个模块用来防御跨站请求伪造(CSRF)。参
|
|
ySJ
|
2.0/chapter16/#36 |
2010-04-23 11:19:54
|
可以通过阅读源码来了解关于这个框架的更多信息,源码的位置在 <literal>django/contrib/contenttypes/</literal>。
|
|
ySJ
|
2.0/chapter16/#34 |
2010-04-23 11:19:18
|
<literal>contenttypes</literal> : 这是一个用于引入文档类型的框架,每个安装的Django模块作为一种独立的文档类型。
|
|
ySJ
|
2.0/chapter16/#32 |
2010-04-23 11:18:31
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#29 |
2010-04-23 11:16:18
|
参见第十四章。
|
|
ySJ
|
2.0/chapter16/#26 |
2010-04-23 11:15:36
|
本书没有介绍这方面的知识;详情请参阅Django官方文档。
|
|
ySJ
|
2.0/chapter16/#25 |
2010-04-23 11:04:12
|
<literal>admindocs</literal>:为Django admin站点提供自动文档。
|
|
ySJ
|
2.0/chapter16/#23 |
2010-04-23 11:02:22
|
请查看第6章。
|
|
ySJ
|
2.0/chapter16/#18 |
2010-04-23 11:01:35
|
当 Django 开发者向框架增加新功能的时,他们会严格根据这一原则来决定是否把新功能放入<literal>django.contrib</literal>中。
|
|
ySJ
|
2.0/chapter16/#17 |
2010-04-23 11:01:01
|
就算你将整个<literal>django.contrib</literal>开发包删除,你依然可以使用 Django 的基础功能而不会遇到任何问题。
|
|
ySJ
|
2.0/chapter16/#16 |
2010-04-23 11:00:33
|
<literal>django.contrib</literal> 开发包共有的特性是:
|
|
ySJ
|
2.0/chapter16/#12 |
2010-04-23 10:57:16
|
这些子包一般是互相独立的,不过有些<literal>django.contrib</literal>子包需要依赖其他子包。
|
|
ySJ
|
2.0/chapter16/#11 |
2010-04-23 10:54:16
|
Django的标准库存放在 <literal>django.contrib</literal> 包中。每个子包都是一个独立的附加功能包。
|
|
ySJ
|
2.0/chapter16/#5 |
2010-04-23 10:48:13
|
安装Python的同时会安装好大量的标准软件包,这样 你可以立即使用而不用自己去下载。
|
|
ySJ
|
2.0/chapter15/#472 |
2010-04-23 10:47:07
|
admin站点(第六章)和session/user框架(第十四章)。
|
|
ySJ
|
2.0/chapter15/#473 |
2010-04-23 10:46:17
|
下一章中,我们将讲述Django中其他的子框架。
|
|
ySJ
|
2.0/chapter15/#471 |
2010-04-23 10:45:53
|
我们已经介绍了一些:
|
|
ySJ
|
2.0/chapter15/#470 |
2010-04-23 10:44:48
|
Django捆绑了一系列可选的方便特性。
|
|
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/#465 |
2010-04-23 10:41:11
|
另一方面,<literal>FetchFromCacheMiddleware</literal>在请求阶段运行,这时中间件循序执行,所以列表顶端的项目会<emphasis>首先</emphasis>执行。
|
|
ySJ
|
2.0/chapter15/#463 |
2010-04-23 10:38:25
|
添加<literal>Accept-Language</literal>的<literal>LocaleMiddleware</literal> |
|
ySJ
|
2.0/chapter15/#457 |
2010-04-23 10:37:20
|
下面的中间件模块就是这样的:
|
|
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:36:36
|
下面的中间件模块就是这么做的:
|
|
ySJ
|
2.0/chapter15/#456 |
2010-04-23 10:35:12
|
所有,你需要确保<literal>UpdateCacheMiddleware</literal>排在任何可能往<emphasis>Vary</emphasis>头部添加信息的中间件<literal>之前</literal>。
|
|
ySJ
|
2.0/chapter15/#455 |
2010-04-23 10:33:26
|
<literal>UpdateCacheMiddleware</literal>在相应阶段运行。因为中间件是以相反顺序运行的,所有列表顶部的中间件反而<emphasis>last</emphasis>在相应阶段的最后运行。
|
|
ySJ
|
2.0/chapter15/#453 |
2010-04-23 10:31:26
|
中间件总是尽可能得想<literal>Vary</literal>响应头中添加信息。
|
|
ySJ
|
2.0/chapter15/#452 |
2010-04-23 10:30:17
|
因为缓存中间件需要知道哪些头部信息由哪些缓存区来区分。
|
|
ySJ
|
2.0/chapter15/#451 |
2010-04-23 10:28:22
|
如果使用缓存中间件,注意在<literal>MIDDLEWARE_CLASSES</literal>设置中正确配置。
|
|
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/#438 |
2010-04-23 10:25:09
|
例如:
|
|
ySJ
|
2.0/chapter15/#437 |
2010-04-23 10:22:04
|
如果你想用头部完全禁掉缓存,<literal>django.views.decorators.cache.never_cache</literal>装饰器可以添加确保响应不被缓存的头部信息。
|
|
ySJ
|
2.0/chapter15/#435 |
2010-04-23 10:19:39
|
如果你在cache_control修饰器中使用了自定义的max_age,该修饰器将会取得优先权,该头部的值将被正确地被合并。
|
|
ySJ
|
2.0/chapter15/#434 |
2010-04-23 10:19:05
|
缓存中间件已经使用 <literal>CACHE_MIDDLEWARE_SETTINGS</literal> 设置设定了缓存头部 max-age 。
|
|
ySJ
|
2.0/chapter15/#416 |
2010-04-23 10:18:25
|
在 <literal>cache_control()</literal> 中,任何合法的<literal>Cache-Control</literal> HTTP 指令都是有效的。下面是完整列表:
|
|
ySJ
|
2.0/chapter15/#410 |
2010-04-23 10:17:07
|
(一些缓存即便在服务器页面发生变化的情况下仍然会传送所缓存的内容,只因为缓存拷贝没有过期。)
|
|
ySJ
|
2.0/chapter15/#407 |
2010-04-23 10:15:33
|
定义页面可以被缓存的最大时间。
|
|
ySJ
|
2.0/chapter15/#402 |
2010-04-23 10:12:23
|
该修饰器负责在后台发送相应的 HTTP 头部。
|
|
ySJ
|
2.0/chapter15/#399 |
2010-04-23 10:10:37
|
例如:
|
|
ySJ
|
2.0/chapter15/#389 |
2010-04-23 10:07:58
|
关于缓存剩下的问题是数据的隐私性以及在级联缓存中数据应该在何处储存的问题。
|
|
ySJ
|
2.0/chapter15/#387 |
2010-04-23 10:07:01
|
使用其它头部
|
|
ySJ
|
2.0/chapter15/#386 |
2010-04-23 10:06:50
|
控制缓存:
|
|
ySJ
|
2.0/chapter15/#380 |
2010-04-23 10:05:59
|
你也可以直接使用帮助函数:<literal>django.utils.cache.patch_vary_headers</literal>。
|
|