设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> 网络编程 >> PHP >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
使用PHP的Socket写的POP…
PHP中使用crypt()实现用…
PHP+MySQL应用中使用XOR…
PHP使用者状态管理功能的…
在PHP5中使用DOM控制XML…
在PHP5中使用DOM控制XML…
在php中使用sockets:从…
使用PHP维护文件系统
[硬件 通讯]PHP使用RS23…
使用php重新实现PHP脚本…
  使用TurboGears和Python开发Web 站点         
使用TurboGears和Python开发Web 站点
 

2006 年 9 月 18 日

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

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

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

分类显示 

产品显示

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


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

@expose("tgcommerce.templates.product")

def product(self, productID):

    from model import Product

    product = Product.get(productID)

    return dict(product=product)

      

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

<table id="product-info">

  <tr>

    <td class="fld">Name:</td>

    <td class="val"><span py:replace="product.name" /></td>

  </tr>

  <tr>

    <td class="fld">SKU:</td>

    <td class="val"><span py:replace="product.sku" /></td>

  </tr>

  <tr>

    <td class="fld">Price:</td>

    <td class="val">$<span py:replace="'%.2f' % product.price" /></td>

  </tr>

</table>

      


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


图 3. 产品显示页面
产品显示页面 

错误处理

     控制器方法尚未考虑的一件事是 SQLObject 的 get 方法所抛出的 SQLObjectNotFound 异常。清单 16 给出了捕获这个异常并将其作为 NotFound 异常重新抛出的方法,这会发送一个基本的 HTTP 404 错误:


清单 16. 向 Controller 类添加的错误处理

from model import Category, Product

from sqlobject import SQLObjectNotFound

from cherrypy import NotFound

from turbogears import controllers, expose, url

class Root(controllers.Root):

    @expose("tgcommerce.templates.category")

    def category(self, categoryID):

 try:

     category = Category.get(categoryID)

 except SQLObjectNotFound:

     raise NotFound()

 return dict(category=category)

    @expose("tgcommerce.templates.product")

    def product(self, productID):

 try:

     product = Product.get(productID)

 except SQLObjectNotFound:

     raise NotFound()

 return dict(product=product)

      

     处理找不到对象的错误的另外一个策略不是发送 404 错误,而是对其进行重定向。这是使用 turbogears.redirect(...) 方法实现的:


清单 17. 重定向的例子

from turbogears import redirect

try:

    object = ClassName.get(objectID)

except SQLObjectNotFound:

    raise redirect("/path_to_redirect")

Linux联盟收集整理

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-1-3 3:34:49
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持