您现在的位置: 捷凌网安 >> 编程语言 >> Linux编程 >> Python编程 >> 正文
使用TurboGears和Python开发Web 站点

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-2-21 6:56:21

2006 年 9 月 18 日

本 系列 文章一共有两篇,本文是第二篇。在本文中,我们将展示 TurboGears 的用法,它是另外一个基于 Python 的 MVC 风格的 Web 应用程序框架。在第一篇文章中我们介绍了 Django 框架,本文将介绍如何使用 TurboGears 来创建一个基于 Web 的应用程序,并将对 Turbogears 和 Django 进行比较。

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

  • MochiKITjavaScript 库
  • 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 管理工具
~/dev$ tg-admin
TurboGears 0.9a5 command line interface
Usage: /usr/bin/tg-admin [command] [options]
Available commands:
      i18n  Manage i18n data
      info  Show version info
quickstart  Create a new TurboGears project
     shell  Start a Python prompt wITh your database available
       sql  Run the SQLObject manager
   toolbox  Launch the TurboGears Toolbox
    update  Update an existing turbogears project
      

快速启动

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


清单 2. 启动 TurboGears 项目
~/dev$ tg-admin quickstart
Enter project name: TG Commerce
Enter package name [tgcommerce]:
Selected and implied templates:
  turbogears#turbogears  web framework
Variables:
  package:  tgcommerce
  project:  TG-Commerce
Creating template turbogears
  Creating ./TG-Commerce/
    ... (output snipped) ...
      

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

清单 3. 启动测试服务

~/dev/TG-Commerce$ python start-tgcommerce.py
... (output snipped) ...
05/Mar/2006:11:31:54 HTTP INFO Serving HTTP on http://localhost:8080/
      

查看所提供的 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)

sqlobject.dburi="notrans_sqlITe:///path/to/devdir/TG-Commerce/tgcommerce.database"
server.environment="development"
autoreload.package="tgcommerce"
      

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


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

from sqlobject import *
from turbogears.database import PackageHub
hub = PackageHub("tgcommerce")
__connection__ = hub
      

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

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


清单 6. Category 和 Product 类(model.py,续)

class Category(SQLObject):
    name = StringCol(length=64)
    parent = ForeignKey('Category', default=None)
    subcategories = MultipleJoin('Category', joinColumn='parent_id')
    products = MultipleJoin('Product')
class Product(SQLObject):
    name = StringCol(length=64)
    sku = StringCol(length=64)
    price = CurrencyCol(notNone=True, default=0.0)
    category = ForeignKey('Category')
      

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

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

~/dev/TG-Commerce$ tg-admin sql sql
Using database URI sqlITe:///home/ubuntu/dev/TG-Commerce/tgcommerce.db
CREATE TABLE category (
    id INTEGER PRIMARY KEY,
    name VARCHAR(64),
    parent_id INT
);
CREATE TABLE product (
    id INTEGER PRIMARY KEY,
    name VARCHAR(64),
    sku VARCHAR(64),
    price DECIMAL(10, 2) NOT NULL,
    category_id INT
);
      


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


清单 8. Order 和 OrderITem 类(model.py,续)

class Order(SQLObject):
    items = MultipleJoin('OrderItem', joinColumn='order_id')
    class sqlmeta:
        table = 'orders'
class OrderItem(SQLObject):
    quantITy = IntCol(notNone=True)
    price = CurrencyCol(notNone=True)
    total = CurrencyCol(notNone=True)
    order = ForeignKey('Order')
    product = ForeignKey('Product')
      

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


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

~/dev$ tg-admin sql create
Using database URI sqlITe:///home/ubuntu/dev/TG-Commerce/tgcommerce.db
      

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

使用 CatWalk 操纵模型

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

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


清单 10. 使用 tg-admin 启动 toolbox 服务

~/dev/TG-Commerce$ tg-admin toolbox
... (snip) ...
05/Mar/2006:15:01:33 HTTP INFO Serving HTTP on http://localhost:7654/
      

[1] [2] [3] 下一页

  • 上一篇文章:

  • 下一篇文章:
  •  
    最进更新
    普通文章VC++设计超强仿QQ自动伸缩窗04-17
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    普通文章多线程、Socket技术及委托技04-11
    推荐文章VB.Net连接各种数据库的几种04-11
    普通文章VB.NET中的多窗体编程:升级04-11
    普通文章用VB.NET定制Windows控件04-11
    普通文章VB.NET中监视文件夹的变化04-11
    普通文章VB.NET中对象的克隆04-11
    推荐文章VB.NET中的TextBox控件详解04-11
     
    推荐文章
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    推荐文章VB.Net连接各种数据库的几种04-11
    推荐文章VB.NET中的TextBox控件详解04-11
    推荐文章在VB.NET中进行抓屏04-11
    推荐文章VB.Net开发的长内容自动分页04-11
    推荐文章VB.NET中快速访问注册表技巧04-11
    推荐文章PHP5手动最简安装方法03-07
    推荐文章完全讲解PHP+MySQL的分页显示03-07
    推荐文章Linux Shell元字符知识笔记02-21
     
    热点文章 
    普通文章VC++设计超强仿QQ自动伸缩窗04-17
    推荐文章基于HOOK和MMF的Win密码渗透04-17
    推荐文章几种VC++数据库开发技术的相04-17
    普通文章VB.NET中的多窗体编程:升级04-11
    普通文章用VB.NET定制Windows控件04-11
    普通文章VB.NET中对象的克隆04-11
    推荐文章VB.NET中的TextBox控件详解04-11
    普通文章VB/VB.NET/C#导出到Excel的方04-11
    普通文章如何通过VB.NET获取网卡地址04-11
    普通文章VB.NET中使用ListView控件的04-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号