第一部分 TurboGears基础知识第1章 TurboGears简介 2
1.1 为什么选择TurboGears 2
1.1.1 让简单的事情易于实现 2
1.1.2 让应用程序易于维护 3
1.2 TurboGears的历史 4
1.3 TurboGears、Ajax和Web 2.0 5
1.4 为什么TurboGears称得上“Pythonic” 5
1.5 可以使用TurboGears做什么 7
1.6 TurboGears的新功能 7
1.7 小结 8
第2章 TurboGears起步 9
2.1 安装TurboGears和SQLite 9
2.2 创建“Hello World”应用程序 11
2.3 使用简单模板 14
2.4 自定义问候语 15
2.5 小结 17
第3章 TurboGears应用程序的架构 18
3.1 什么是MVC 18
3.2 设计模式和面向对象MVC 19
3.3 了解SQLObject和TurboGears模型 21
3.4 了解CherryPy以及TurboGears控制器 24
3.5 了解Kid和TurboGears视图 26
3.6 MVC遇到了Ajax 27
3.7 小结 28
第二部分 构建简单的TurboGears应用程序第4章 创建简单的应用程序 30
4.1 构建简单的书签收藏站点 30
4.2 测试TurboGears应用程序 36
4.3 增加书签的简易表单 38
4.4 小结 40
第5章 增强书签应用程序 42
5.1 更新模型 42
5.2 根据分类列出书签 44
5.3 更新表单 47
5.4 将所有部分融为一体 53
5.5 选择类别 54
5.6 小结 58
第三部分 探究实际TurboGears应用程序第6章 在WhatWhat Status中探究更加复杂的模型 60
6.1 WhatWhat Status是什么 60
6.2 登录并且使用WhatWhat Status 61
6.3 探究WhatWhat Status的模型 63
6.4 编写更好的模型类 69
6.4.1 将所有模型逻辑存放于模型方法中 69
6.4.2 将复杂的关联逻辑封装在新的类中 69
6.5 小结 70
第7章 WhatWhat Status中的控制器、视图以及JavaScript 71
7.1 Dashboard控制器 71
7.1.1 WhatWhat中的安全和身份验证 72
7.1.2 探索Dashboard的index()方法 74
7.2 Dashboard模板 76
7.3 增加新的项目 78
7.4 Dashboard控制器:new_project 81
7.5 小结 83
第8章 WhatWhat Status中的RSS、Cookies和动态视图 84
8.1 Cookies和最近更新 84
8.2 Recent Changes模板 88
8.3 WhatWhat Status中的Widget 91
8.4 使用FeedController简化RSS 93
8.5 小结 96
第9章 Ajax和WhatWhat Status项目 97
9.1 处理Ajax请求 97
9.1.1 Ajax请求/HTML响应 97
9.1.2 Ajax请求/JSON响应 98
9.1.3 Ajax和XML请求 98
9.2 深入研究Project控制器的方法 99
9.3 初识project.kid 102
9.3.1 为项目页面做好铺垫 102
9.3.2 使用Ajax更新项目状态以及项目描述 104
9.4 小结 106
第四部分 SQLObject与TurboGears模型第10章 SQLObject基础 110
10.1 ORM基础 110
10.1.1 谁需要ORM 111
10.1.2 ORM的替代方案 111
10.1.3 ORM的劣势 111
10.2 SQLObject的基本特性 112
10.2.1 基本的连接管理 112
10.2.2 根据SQLObject的继承类自动创建数据库的框架 114
10.2.3 使用Metadata类对行为进行细微的控制 114
10.2.4 根据已有的数据库框架自动生成表描述 115
10.3 简单数据库查询 115
10.3.1 通过ID获取单个对象 116
10.3.2 获取整个数据表 116
10.3.3 根据列值获取数据行 118
10.4 小结 119
第11章 精通SQLObject 120
11.1 映射关联 120
11.1.1 一对多关联 120
11.1.2 多对多关联 122
11.2 直接的SQL查询 124
11.3 智能查询 125
11.3.1 基于sqlbuilder的查询 125
11.3.2 多表联合查询 127
11.3.3 表连接 128
11.3.4 嵌套查询 129
11.4 操作大型结果集 129
11.4.1 以子集的方式操作大型结果集,而非list()方法 129
11.4.2 别实例化大型数据集,直接使用SQL 131
11.4.3 对大量的插入、更新和删除操作使用相同的方法 132
11.4.4 别为了一个对象而多次访问数据库 132
11.5 小结 133
第12章 自定义SQLObject的功能 134
12.1 使用sqlmeta自定义SQLObject类 134
12.1.1 深入探索sqlmeta类 135
12.1.2 列、索引和连接 135
12.1.3 命名技巧 136
12.1.4 延迟更新和缓存 137
12.1.5 过期数据行 138
12.1.6 默认排序 138
12.2 高级的SQLObject自定义 138
12.2.1 增加魔力属性 139
12.2.2 覆写属性访问 140
12.3 SQLObject和继承 141
12.3.1 Python对象、继承和聚合 141
12.3.2 聚合与标准Python继承的比较 141
12.3.3 SQLObject聚合与继承的比较 143
12.4 SQLObject和事务 145
12.4.1 事务和连接 145
12.4.2 sqlhub和事务 148
12.4.3 使用包装函数封装事务 149
12.4.4 使用修饰器封装事务 150
12.5 小结 151
第五部分 TurboGears视图技术第13章 使用Kid实现动态模板 154
13.1 使用Kid创建动态模板 154
13.1.1 使用Python增强的处理指令符 155
13.1.2 生成内容的表达式 155
13.1.3 控制结构 156
13.1.4 Kid的内建函数 158
13.2 超越基础:让模板保持DRY 158
13.2.1 使用py:match进行转化 159
13.2.2 使用py:match创建自定义标签 161
13.2.3 使用py:extends创建父模板 162
13.3 融会贯通 162
13.4 小结 164
第14章 使用MochiKit创建更好的JavaScript代码 165
14.1 概述 165
14.1.1 MochiKit的封装 166
14.1.2 MochiKit的交互式命令解释程序 166
14.2 MochiKit及其交互式命令解释程序简介 166
14.3 Base方法 167
14.3.1 比较问题 167
14.3.2 更复杂的比较问题 168
14.3.3 JavaScript中的对象 169
14.3.4 JavaScript和Python的区别 170
14.3.5 对象的表示 170
14.3.6 JSON序列化 172
14.3.7 使用数组 173
14.3.8 Pythonic版的this 175
14.3.9 对调用函数的优化 176
14.3.10 类字典对象 177
14.3.11 使用查询字符串 177
14.3.12 MochiKit.Base中的函数 178
14.4 JavaScript中的迭代器 179
14.4.1 创建一个迭代器 179
14.4.2 Itertools中的工具 180
14.4.3 MochiKit.Iter所特有的函数 182
14.5 文档对象模型 182
14.5.1 获取元素 183
14.5.2 使用样式 183
14.5.3 创建DOM节点 188
14.5.4 简单事件 190
14.5.5 其他DOM函数 190
14.6 使用MochiKit.Logging来调试程序 191
14.6.1 使用Logging 191
14.6.2 扩展Logging 192
14.6.3 简单的日志示例 193
14.7 使用颜色 194
14.7.1 示例 194
14.7.2 获得颜色的更多方法 198
14.7.3 颜色转换 199
14.7.4 修改颜色 199
14.8 字符串的转换和值的格式化 199
14.8.1 处理日期和时间 200
14.8.2 格式化数字 200
14.8.3 其他格式化函数 201
14.9 小结 202
第15章 使用MochiKit增强Ajax 203
15.1 处理异步事件——包括Ajax请求 203
15.1.1 处理迟来的结果 203
15.1.2 创建一个请求 204
15.1.3 错误处理 205
15.1.4 参数传递 205
15.1.5 Ajax的局限性 206
15.1.6 使用JSON 206
15.1.7 使用计时器 207
15.1.8 取消 207
15.1.9 Ajax、计时器和取消的组合 208
15.1.10 深入了解回调函数 208
15.2 使用MochiKit.Signal处理JavaScript事件 209
15.2.1 初识MochiKit.Signal 209
15.2.2 连接与断开连接 212
15.2.3 使用MochiKit的Cross-Browser Event对象 212
15.2.4 自定义事件 214
15.3 “WowFactor”的视觉效果 215
15.3.1 圆角效果 215
15.3.2 初识Effects 216
15.3.3 效果选项 217
15.3.4 核心效果 218
15.3.5 组合效果 218
15.3.6 自定义效果 219
15.3.7 效果示例 221
15.3.8 Sortables和DragAndDrop 228
15.4 小结 230
第16章 TurboGears Widget:将CSS、XHTML和JavaScript融合为可复用的组件 231
16.1 理解Widget 231
16.1.1 初始化时候的自定义 232
16.1.2 呈现时候的属性赋值 233
16.1.3 在Widget中使用可调用对象 233
16.2 表单Widget 234
16.2.1 自定义表单布局 234
16.2.2 表单字段Widget 235
16.3 复合Widget 236
16.4 Widget与校验 238
16.4.1 FormEncode校验器如何集成至表单Widget中 238
16.4.2 更多的校验器 239
16.4.3 模式校验基础 241
16.5 CSS、JavaScript和Widget 242
16.6 创建自定义Widget 242
16.7 Ajax Widget的剖析 245
16.8 小结 247
第六部分 CherryPy与TurboGears控制器技术第17章 CherryPy和TurboGears的修饰器 250
17.1 CherryPy的URL解析 250
17.2 CherryPy与HTTP请求/响应循环 251
17.3 CherryPy过滤器 253
17.3.1 输入过滤器 253
17.3.2 输出过滤器 254
17.3.3 自行创建过滤器 254
17.4 CherryPy和TurboGears配置 255
17.5 修饰器 256
17.5.1 expose() 256
17.5.2 validate() 257
17.6 错误及异常处理 258
17.6.1 有效性错误 258
17.6.2 复合句柄 259
17.6.3 Exception Handling 259
17.7 TurboGears中的REST样资源 260
17.8 小结 262
第18章 部署TurboGears 263
18.1 选择部署环境 263
18.1.1 服务器使用的作业系统Linux、Mac OS、Windows 263
18.1.2 该在其他网页服务器后运行CherryPy吗 264
18.1.3 TurboGears基础部署设定 264
18.2 使用mod_rewrite或mod_proxy连接到CherryPy 265
18.2.1 在CherryPy前使用代理的优缺点 265
18.2.2 设定Apache与mod_rewrite 266
18.2.3 设定Apache以直接提供静态文件连接 266
18.2.4 设定CherryPy在网页服务器后工作 266
18.2.5 确保CherryPy持续运作 267
18.3 在mod_python上运行CherryPy 268
18.3.1 使用mod_python的优缺点 268
18.3.2 为mod_python设定Apache/CherryPy 269
18.4 在网页服务器后运行CherryPy的其他方法 269
18.5 网站的扩充性 270
18.5.1 扩充Sessions 270
18.5.2 扩充程序 270
18.5.3 低花费的扩充 271
18.6 小结 271
第七部分 TurboGears扩展 274
第19章 TurboGears的工具箱及其工具 274
19.1 工具箱简介 274
19.2 ModelDesigner 275
19.3 CatWalk 277
19.4 WebConsole 279
19.5 Widget浏览器 280
19.6 Admi18n和System Info 281
19.7 tg-admin命令 281
19.8 其他TurboGears工具 282
19.9 小结 282
第20章 国际化 284
20.1 在Python中处理Unicode 284
20.2 在TurboGears中处理Unicode 285
20.2.1 SQLObject和Unicode 285
20.2.2 Kid模板 286
20.2.3 CherryPy的请求/响应循环中的Unicode 287
20.3 翻译应用程序 287
20.3.1 Python源所在的位置 288
20.3.2 Kid模板的地域化 289
20.3.3 自动检测用户的语言偏好 290
20.3.4 具体地域对象 290
20.3.5 Admin i18n界面 291
20.4 小结 292
第21章 测试TurboGears应用程序 293
21.1 Nose 293
21.2 TurboGears中的testutil 297
21.3 Mechanize 301
21.4 Selenium 303
21.5 小结 307
第22章 TurboGears中的Identity和安全问题 308
22.1 使用Identity进行基本的身份验证和用户授权 308
22.2 使用Identity验证用户访问 313
22.3 避免常见的安全隐患 314
22.4 小结 315
附录 SQLAlchemy 316