`
zhougaomin_007
  • 浏览: 11818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

windows下 turboGears 学习点滴

阅读更多
---------------------安装部分----------------------------------------
turboGears的安装还是比较简单的(以下说的所有插件都指Python插件):
1,安装python的最新稳定版本2.5,这样python的插件Setuptools 就默认安装好了,这个tools能够简单的安装归档文件.egg。如果安装的是python2.4,需要手动安装Setuptools。
2,在www.turboGears.org下载tgsetup.py 文件,命令行下运行python tgsetup.py就会安装好turboGears。
3,数据库安装,要是不想使用默认数据库sqlite,那么需要下载Python-Mysql插件进行安装。记住Mysql要已经安装在机器上,否则安装插件时会报错。
-------------------------使用部分-----------------------------------
在安装 TurboGears 之后,我们就应该有了管理工具 tg-admin,命令行中输入 tg-admin 查看它是否存在。

快速启动

要启动 TurboGears 项目,我们需要使用 tg-admin quickstart 功能。我们会被要求提供一个项目名和一个目录名。比如输入Hello World:
这样就在当前目录下创建了Hello-World的目录,
cd Hello-World
start-helloworld.py
就会运行一个测试服务器,通过http://localhost:8080/访问网页就可以看到一个最简单的网站。

turboGears使用MVC的模型,在子目录helloworld下的model.py,controllers.py分别对应M和C,由于主要使用到的是数据库,这里model.py中对应的class相当于数据库中的表,class的成员就是字段。controllers.py则主要进行url的解析以及对应到某个View,这里的View都存放在子目录helloworld/templates下的.kid文件中,kid文件其实是个模板文件,主要是将controllers.py传过来的数据应用到这个模板然后产生相应的html文件再传输给用户。

现在我们创建一个模型(就是在数据库中创建一张表),要配置 TurboGears 数据库,我们需要在 dev.cfg 文件中指定 sqlobject.dburi,这个文件在Hello-World目录下。对于默认的sqlite数据库,已经有了默认的配置,我们要使用mysql,那么就要改成:sqlobject.dburi="mysql://root:123456@localhost/test"
这里的root和123456对应mysql的用户和密码,localhost是机器名,这里使用本机,test是数据库名称,请相应的修改成自己的。记住,test数据库必须已经在mysql中创建出来,并已经授权给用户,这里使用root帐号,免得麻烦。

我们生成一个最简单的表,在model.py中加上class定义:
class HelloTable(SQLObject):
    name     = StringCol(length=64)
    descript = StringCol(length=64)


接着在命令行下使用 tg-admin sql create 命令创建数据库表。记住,创建了project后命令行都是在Hello-World这个目录下进行的,既不是在更上一层创建project的那个目录,也不是在model.py等py文件所在的子目录helloworld。

现在创建了表hello_table,哦,如果不想使用默认的这个表名而想使用自己的命名规则,则这样写:
class HelloTable(SQLObject):
    name     = StringCol(length=64)
    descript = StringCol(length=64)
    class sqlmeta:
        table = 'myhellotable'

主要是添加了一个内嵌的sqlmeta类,下面有一个table的字符串变量。我这里还是使用最上面的HelloTable类。

如果不想在mysql命令行下插入hello_table数据,可以使用CatWalk 的模型浏览器。
刚才那个目录下输入tg-admin toolbox就可以运行一个网页,选择CatWalk,就可以添加删除表数据了。现在先让我们添一些数据进去吧。

创建视图

在 TurboGears 中,Kid 文件都位于 templates 目录中,扩展名为 .kid。默认情况下,有一个 master.kid 文件和一个 welcome.kid 文件,其中 master.kid 文件是基础模板文件,welcome.kid 就是主页面。我们可以简单的拷贝复制一份welcome.kid改名为hello.kid。
然后将以下这些文本替换原来的文本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:py="http://purl.org/kid/ns#"
    py:extends="'master.kid'">

<head>
    <title>hello</title>
</head>

<body>
	<div id="hellopage">
		<ul>
		<li py:for="row in list(hellotable)[::-1]">
				>
				<a href="/hello/${row.id}"
						py:content="row .name"></a>
			</li>

		</ul>
	</div>
</body>
</html>

创建控制器
刚才写了一个View,但是要想显示,需要在controllers.py 中暴露接口。以下就是整个
from turbogears import controllers, expose

class Root(controllers.Root):

    @expose("helloworld.templates.hello")#hello就是指我们刚才创建的hello.kid名字
    def index(self):
	from model import HelloTable
	hellotable= HelloTable.select()
	return dict(hellotable=hellotable)

好了,现在运行start-helloworld.py,然后就可以在http://localhost:8080/中看到hello_table中的所有数据

===============================================================================
2007/12/6

今天看到一个TgFusionCharts的flash显示数据统计图,感觉很好用,先在这里记下来。
先下载SWF文件:到FusionCharts的网站下载最新的文件:http://www.fusioncharts.com,可惜的是它是收费的,给的免费试用版swf文件会产生一条多余的文字信息。

然后到http://www.thesamet.com/TGFusionCharts/下载TgFusionCharts,这是个python插件,安装完以后(注意TgFusionCharts现在仅支持python2.4,主要是其中要用到的cElementTree只支持2.4,所以要用的话,除了使用python2.4外,你需要本机安装vs2003,然后下载cElementTree源代码编译,我本机安装的是vs2005,所以我就简单的重新安装了turbogears到python2.4了事),将FusionCharts下载的文件中的swf都拷贝到turbogears当前工程(我们这里就是helloworld工程)下的Hello-World\helloworld\static\flash下面(注意需要创建flash这个文件夹)。如果你只需要其中某个饼图,那么可以只拷贝这个swf文件到该目录即可。我这里就拷贝其中的Pie2D.swf到该目录下。

然后在controllers.py暴露接口,添加一个expose:
    @expose(template="helloworld.templates.first_chart")
    def first_chart(self):
	  
        chart_widget = Pie2DChartWidget(
            chart_id='chart2', width=200, height=200,
            chart=SingleSeriesChart(
                [6,11,8,3], 
                caption="提示:")
            )
        return dict(chart=chart_widget)

记住,如果需要unicode,需要utf-8的编码,并且文件也要保存成utf-8的格式才行。

然后写一个视图first_chart.kid,将welcome.kid拷贝一份改一下名字,清空body中的所有div,然后在其中添加上:${chart()} 就行了。不过要记住这里的chart()要对应controllers.py中传入dict中的那个名字。
保存以后,运行服务器,然后http://localhost:8080/first_chart看看效果吧。
分享到:
评论
1 楼 zhougaomin_007 2007-12-06  
flash高手看看能否将swf文件用硕思flash mx将其中的无用信息去掉?我不太懂as脚本,看不懂也找不到那个标记在哪里。

相关推荐

Global site tag (gtag.js) - Google Analytics