Month: August 2008

  • TurboGears 学习笔记-控制器

    这部分内容虽然不多,但是看了好多天。

    在 tgadmin 自动生成的 appname/appname/controller.py 中有如下代码:

    1 import turbogears as tg
    2 from turbogears import controllers, expose, flash
    3 from cherrypy import request
    4 # from sandbox import model
    5 # import logging
    6 # log = logging.getLogger(“sandbox.controllers”)
    7
    8 class Root(controllers.RootController):
    9 @expose(template=sandbox.templates.welcome)
    10 def index(self):
    11 import time
    12 # log.debug(“Happy TurboGears Controller Responding For Duty”)
    13 flash(Your application is now running)
    14 return dict(now=time.ctime())

    Root.index 是 http://127.0.0.1:8080/index 的控制器。如果需要添加新的“页面”,只要在 Root 中添加新的方法即可:

    16 @expose()
    17 def foobar(self):
    18 return Just another page

    @expose() 是一定要加的,不加这个,无法定位控制器的方法。

    我这里没有添加 template,所以框架将返回的内容直接作为字符串输出在页面上了。

    如果想使用模板(默认为Kid),则指定模板名称 template=”appname.appname.foobar”,这个对应的是项目根开始的目录和模板文件名的结构。实际模板应保存在 appname/appname/foobar.kid 文件中。

    控制器通过 expose 出来的方法的参数获得浏览器传递过来的变量,对上面的方法稍加改造即可:

    16 @expose()
    17 def foobar(self, *args, **kv):
    18 if (kv.has_key(name)):
    19 name = kv[name]
    20 else:
    21 name = unknown
    22 return Your name is + name

    当访问 http://127.0.0.1:8080/foobar 时,页面显示 Your name is unknown。当访问 http://127.0.0.1:8080/foobar?name=fool 时,页面显示 Your name is fool。

    当提供一个名为 default 的方法 expose 时,所有未定义的访问都会转到这个方法上去。这时,args 参数包含了访问所用的名字。例如访问 http://127.0.0.1:8080/barfoo,而 barfoo 未定义,那么default 方法被调用。同时 args[0] = “barfoo“。

    好像控制器最基本的使用就这么些东西了,有点类似 Zend Framework 的 Controller->Action 的形式,仅仅是形式。

  • RatProxy 在 cygwin 下的编译

    ubuntu 下已经搞掂,很简单:apt-get install make gcc build-essential libssl-dev ca-certificates,然后 make 即可。

    cygwin 下有一点小麻烦,特别记录一下:

    需要安装的包:make gcc binutils openssl-devel

    需要做的改动:Makefile 的 CFLAGS = -Wall -O3 -Wno-pointer-sign -D_GNU_SOURCE 改为 CFLAGS = -Wall -O3 -D_GNU_SOURCE,去掉 -Wno-pointer-sign。否则会有一个不支持参数 xxxx 的报错。

    然后一样,make 即可。

  • TurboGears 学习笔记-安装

    Zope3 很强大,但是一直徘徊在 python 2.4 不升级。学习的兴趣骤减。Django 版本一直停滞在 0.96 不前。据说 12 月会出 1.0,但是兼容性似乎不能保障。偶然的机会看到一篇 TurboGears 的文章,似乎停简单。于是乎,先学安装。

    TurboGears 的安装已经简单到了及至:easy_install turbogears。

    在 ubuntu 下使用 easy_install 这个命令需要安装 python-setuptools 这个包。

    在终端中执行 tg-admin 这个命令,一切正常,除了会有一个警告:UserWarning: Your installation of Python doesn’t have a profile module.原来还需要安装 python-profiler 这个包,使用 apt-get 安装之后,这个警告就不会再出现了。

    使用 tg-admin quickstart 生成一个项目,比如 sandbox。进入自动生成的 sandbox 目录,执行命令 ./start-sandbox.py 一切 OK,只要 8080 端口没有被占用,TurboGears 就正常启动了。

    在开发模式下,如果需要修改 8080 端口,找到 dev.cfg 文件中的 #server.socket_port=8080 行,去掉注释,修改端口,重新执行 ./start-sandbox.py 即可。

    TurboGears 所具有的美感是 zend framework 所不具备的。连安装和部署都这么简单。希望 zend framework 能够取其之长,至少提供几个实用的自动化工具也好啊。