全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 经管代码库
1101 1
2015-04-06

TurboGears 开发人员称这个项目是一个 “大框架(megaframework)”,这是因为它是由现有的子项目构成的。TurboGears 可以帮助将很多主要组件集成在一起:



  • MochiKit:JavaScript 库
  • Kid:模板语言
  • CherryPy:基本 Web 框架
  • SQLObject:对象关系映射器(ORM)


安装 TurboGears




使用 TurboGears 的第一个步骤是确保我们已经安装了 Python。TurboGears 的最新版本需要 Python 2.4。请参见 参考资料 中 Python 主页的链接。


Setuptools 是 Python 社区开发的一个新项目,它可以更方便地安装并更新 Python 软件。软件以归档文件的形式进行打包,称为 Egg,这与 Java™ 的 JAR 文件或 Ruby GEM 文件类似,可以使用一个名为 easy_install 的工具下载并安装。


TurboGears 是第一个使用 setuptools 工具来进行分发和安装的大型 Python 项目。请参见 参考资料 中 setuptools 页面的链接和 TurboGears 的下载页面。



本文使用了撰写本文时最新的开发版本(0.9a5),这可以通过 preview 的下载页面得到:


easy_install -f http://www.turbogears.org/preview/download/index.html TurboGears

要获得最新版本的 TurboGears(目前是 0.8.9),我们可以简单地删除 -f 选项和 preview 站点的 URL:

easy_install TurboGears



检查 TurboGears 管理工具



在安装 TurboGears 之后,我们就应该有了管理工具 tg-admin,它在您自己的目录中。我们可以在命令行中输入 tg-admin 查看它是否存在:


清单 1. 使用 TurboGears 管理工具
复制代码





快速启动



要启动 TurboGears 项目,我们需要使用 tg-admin quickstart 功能。我们会被要求提供一个项目名和一个目录名。对于本文来说,我创建了一个简单的购物车,名为 TG Commerce,它有一个名为 tgcommerce 的包:

清单 2. 启动 TurboGears 项目
复制代码


TurboGears 使用下面的 tgcommerce 包创建一个 TG-Commerce 项目。我们现在可以启动这个项目提供的测试服务器了:


清单 3. 启动测试服务器
复制代码


查看所提供的 URL 的测试页面,然后使用 Ctrl-C 杀掉这个服务器。




创建一个模型



SQLObject 是对象关系映射器(ORM)库,它让我们可以开发数据库持久的 Python 对象。我们定义一个 Python 类,并添加所需要的属性(域),然后让 SQLObject 生成创建表、插入新记录以及查找、更新或删除现有记录时所需用到的 SQL 语句。

SQLObject 可以支持多种数据库,包括 MySQL、PostgreSQL、Firebird 等。在 参考资料 给出的链接中我们可以找到有关 SQLObject 的更多信息。

在这个例子中,我们使用 SQLite 作为后台的数据库。SQLite 是一个轻量级的数据库,它不需要进行任何配置,只是以简单文件的形式保存在磁盘上。要使用 SQLite,我们需要使用 setuptools 安装 pysqlite 库:

easy_install pysqlite

要配置 TurboGears 数据库,我们需要在 dev.cfg 文件中指定 sqlobject.dburi。对于 SQLite 来说,我们要指定数据库文件所在的位置的路径:


清单 4. 开发配置文件(dev.cfg)
复制代码


TurboGears 快速启动使用样例代码创建并提前生成了一个 model.py 文件。这就是 SQLObject 类应该保存的地方。最上面一节设置数据库连接信息:

清单 5. 模型样例代码(model.py)
复制代码


接下来是模型类。每个类表示数据库中的一个表,它是使用一个映射为数据库列的类级属性定义的。这些属性是 SQLObject 列类型的实例,包括基本数据类型,例如 StringCol 和 CurrencyCol;以及关系类型,例如 ForeignKey 和 MultipleJoin。

对于这个购物车来说,有一个层次 Category 类和一个简单的 Product 类。目录层次是由父 ForeignKey 和子类 MultipleJoin 定义的。


清单 6. Category 和 Product 类(model.py,续)
复制代码


要验证这个模型,请使用 tg-admin sql sql 命令显示创建所需要的表使用的 SQL 代码。注意 SQLObject 会为每个表都创建一个 id 列。即使没有定义主键,这种操作也会发生。有关 SQLObject 的更多文档,请参见 参考资料 给出的链接。


清单 7. 使用 “tg-admin sql sql” 命令查看数据库模式
复制代码


下面是 Order 和 OrderItem 类,它们分别用来保存购物车和所购物品清单。由于 order 是一个 SQL 关键字,因此 Order 类的表名被使用sqlmeta 子类的表属性重新定义为 orders:


清单 8. Order 和 OrderItem 类(model.py,续)
复制代码


使用 tg-admin sql create 命令创建数据库表:


清单 9. 使用 “tg-admin sql create” 命令创建数据库表
复制代码


我们可以使用 tg-admin sql help 找到更多命令,包括删除表的命令。在使用这个命令时要特别小心,因为这会删除所有的表以及表中的数据。由于这个原因,在生产环境中应当锁定 tg-admin 命令。




使用 CatWalk 操纵模型



从 0.9 版本开始,TurboGears 提供了一组名为 Toolbox 的工具,其中包含了一个名为 CatWalk 的模型浏览器。CatWalk 是为那些希望使用一个 GUI 工具来快速创建、更新和删除模型中数据的开发人员设计的。

Toolbox 可以作为一个单独的服务器启动,它可以使用 tg-admin 命令来运行:

清单 10. 使用 tg-admin 启动 toolbox 服务器
复制代码


如果浏览器没有自动打开这个地址,请手工输入 Toolbox 服务器所指定的 URL(http://localhost:7654/),并点击 CatWalk 链接打开 CatWalk。

图 1. CatWalk 工具

Toolbox 是面向开发人员的,而不是面向终端用户的,它最适合辅助完成数据模型化和为应用程序快速提供数据。我们可以使用 Ctrl-C 关闭 toolbox 服务器。在本文介绍中,我们将不会使用这个工具。

(来自 IBM developerworks)






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-4-6 14:39:54
创建视图

在 TurboGears 中创建视图的默认方法是使用 Kid XML 模板化语言。由于 Kid 使用了 XML,因此所有的模板都必须很好地进行格式化,否则在呈现时就会抛出异常。Kid 还可以支持模板继承(template inheritance),这样所生成的新模板就可以对基本模板进行扩充,从而可以在一个地方创建并维护通用代码。

在 TurboGears 中,Kid 文件都位于 templates 目录中,扩展名为 .kid。默认情况下,有一个 master.kid 文件和一个 welcome.kid 文件,其中 master.kid 文件是基础模板文件,welcome.kid 在其 <html> 标记中使用 py:extends 属性对其进行了继承。

要创建一个新模板,我建议您对 welcome.kid 文件进行拷贝或重命名,并使用它作为起点开始下一步的工作。对于本例来说,我们首先创建的是分类模板,它会显示有关给定分类的以下信息:


  • 分类名(title 和 breadcrumb)
  • 到祖先的链接(breadcrumb)
  • 到子分类的链接(list)
  • 到产品的链接(list)

清单 11. 分类页面 kid 模板文件(category.kid
复制代码

清单 11 展示了一些关键的 Kid 功能:


  • 使用 py:extends 继承 master.kid
  • 在 title 中使用 ${category.name} 进行表达式替换
  • 使用 py:for 遍历祖先、子分类和产品
  • 使用限制逻辑对在 breadcrumb 中显示的祖先进行反向
  • 使用 py:content 填充链接文本
  • 使用 py:replace 完全替换 span 标记

上面引用的 ancestors 属性要想有效,Category 模型类需要修改成包含一个 _get_ancestors 方法:

清单 12. 将 “ancestors” 属性的 “get” 方法添加到 Category 类中
复制代码



创建控制器

TurboGears quickstart 提供了一个具有 controllers.py 模块的项目,该模块是 Root 控制器类所在的位置。这是应用程序的主入口点,也是添加新控制器方法的地方。

下面是 TurboGears expose 中与分类 HTML 模板有关的两个样例控制器方法。控制器方法会返回字典,它们在对指定的 Kid 模板进行呈现时被用作名称空间或上下文。

清单 13. 控制器类
复制代码


在 TurboGears 中,URL 非常清楚地映射到方法上,它们都包含在 Root 控制器中。根 URL / 映射为一个名为 index 的特殊方法。通过向 Root添加一个名为 category 的方法,它就可以通过 URL /category 进行访问了。任何提交的 URL 如果无法匹配给定方法,就会产生一个 404 错误,除非定义了一个 default 方法。

下面是一些可能的 URL 情况及其结果:


  • /:显示没有父 id 的第一个分类
  • /category?categoryID=2:显示 id 值为 2 的分类。
  • /category/1:显示 id 值为 1 的分类(格式为 TG 0.9)
  • /category:抛出一个 500 错误,这是因为缺少分类 id。
  • /xyz:抛出一个 404 错误

图 2 给出了分类显示的页面:

图 2. 分类显示

[size=1.16em]


产品显示

对于产品显示页面来说,我们要创建一个 product 控制器,它会从数据库中检索出一个产品,并将其传递给 product Kid 模板进行呈现。

清单 14. 增加产品控制器方法
复制代码


product.kid 模板有一个产品信息表。此处要注意用来显示价格(有两位小数)的 Python 字符串的格式:

清单 15. 分类页 kid 模板文件(product.kid)
复制代码


图 3 给出了产品显示页面:

图 3. 产品显示页面

[size=1.16em]











二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群