1. 现在来看看第一个页面吧
代码已经准备好...打开浏览器,输入http://localhost:8080/来看看结果怎么样?
FT,得到一个错误。因为我们是在开发模式下面,Cherrypy显示出了所有的错误历史.我们可以看到因为一个SQLObjectNotFound异常导致这个错误.
原因很简单,我们还没有往数据库里面存放任何页面,系统当然抛出SQLObjectNotFound异常.现在来亡羊补牢,往数据库里添加数据:
我们用Turbogears特制的Python Shell来做这件事:
{{{
tg-admin shell
Page(pagename="FrontPage", data="Welcome to my front page")}}}
注意,因为tg-admin已经为我们安排好一切,我们不需要import任何东西
那一行代码就已经为我们在数据库里面创建了一个页面了。
重新载入页面,这次你会看到一个漂亮的页面了:-)
如果创建一个更好的页面?
Wiki的一个特点是你可以直接通过点击"编辑"按钮来编辑页面.希望那些wikispamers没有发现你的小wiki,哈哈
让我们从创建一个编辑页面模板开始,首先拷贝一个"page.kid"
{{{
cd wiki20/templates
cp page.kid edit.kid
cd ../..}}}
在edit.kid里面,我们需要把顶端的"Viewing"改成"Editing",另外修改用来显示数据的
为:
{{{
}}}
现在我们来添加一个Edit方法在我们的Controller里面来使用这个模板:{{{
@turbogears.expose(html="wiki20.templates.edit")
def edit(self, pagename):
page = Page.byPagename(pagename)
return dict(pagename=page.pagename, data=page.data) }}}
这个方法和我们的index方法十分类似,2者主要的区别在于index方法把我们的wiki格式化为HTML页面而edit则直接返回文本.
我们需要一个链接来连到我们的edit方法,最直接的就是在page.kid模板最下面中加上这么一句话:
{{{
Edit this page
}}}
这样就应该ok了!在浏览器里面重新载入页面,你讲看到一个edit链接.点击这个链接,你会进入一个可以编辑的页面,不要点击save
按钮!我们还没有写相关的代码
保存编辑数据
因为在上一节我们做的表单中有一个"save"动作,所以我们我们需要在我们的controller中创建一个叫save的方法.如下面所示:
{{{
@turbogears.expose()
def save(self, pagename, data, submit):
hub.begin()
page = Page.byPagename(pagename)
page.data = data
hub.commit()
hub.end()
turbogears.flash("Changes saved!")
raise cherrypy.HTTPRedirect(turbogears.url("/", pagename=pagename)) }}}
因为表单会提交所有的变量,所以我们添加了submit参数.如果我们不这么做,python就会抱怨说有一个计划外参数.
另外一种避免这个抱怨的方式是用**keywords变量,同时我们需要import cherrypy来进行页面重定向.
{{{
import cherrypy}}}
在这段代码中一些值得注意的:
1.不像前面我们编写的方法,这个save方法没有expose任何模板.这是因为在这个方法中我们最后会重定向到其他页面
2.hub.begin()开始一个事务.就目前这个wiki来说我们根本不需要事务,但是用事务是个好习惯
3."page.data=data"会幕后处理一切与更新数据相关的工作
4.turbogears.flash()会在页面上显示一个消息,你在master.kid模板里看到一个tg_flash变量
5.由于HTTPRedirect是一个异常,HTTPRedirect下面所有的代码都不会执行,非常方便!
搞定!现在我们来试一试,你可以对页面进行编辑然后保存,很像一个wiki了,对不?
现在来看看第一个页面吧
代码已经准备好...打开浏览器,输入[[http://localhost:8080/来看看结果怎么样?|http://localhost:8080/]]
来看看结果怎么样?
FT,得到一个错误。因为我们是在开发模式下面,Cherrypy显示出了所有的错误历史.我们可以看到因为一个SQLObjectNotFound异常导致这个错误.
原因很简单,我们还没有往数据库里面存放任何页面,系统当然抛出SQLObjectNotFound异常.现在来亡羊补牢,往数据库里添加数据:
我们用Turbogears特制的Python Shell来做这件事:
{{{
tg-admin shell
Page(pagename="FrontPage", data="Welcome to my front page")}}}
注意,因为tg-admin已经为我们安排好一切,我们不需要import任何东西
那一行代码就已经为我们在数据库里面创建了一个页面了。
重新载入页面,这次你会看到一个漂亮的页面了:-)
如果创建一个更好的页面?
Wiki的一个特点是你可以直接通过点击"编辑"按钮来编辑页面.希望那些wikispamers没有发现你的小wiki,哈哈
让我们从创建一个编辑页面模板开始,首先拷贝一个"page.kid"
{{{
cd wiki20/templates
cp page.kid edit.kid
cd ../..}}}
在edit.kid里面,我们需要把顶端的"Viewing"改成"Editing",另外修改用来显示数据的
为:
{{{
}}}
现在我们来添加一个Edit方法在我们的Controller里面来使用这个模板:{{{
@turbogears.expose(html="wiki20.templates.edit")
def edit(self, pagename):
page = Page.byPagename(pagename)
return dict(pagename=page.pagename, data=page.data) }}}
这个方法和我们的index方法十分类似,2者主要的区别在于index方法把我们的wiki格式化为HTML页面而edit则直接返回文本.
我们需要一个链接来连到我们的edit方法,最直接的就是在page.kid模板最下面中加上这么一句话:
{{{
Edit this page
}}}
这样就应该ok了!在浏览器里面重新载入页面,你讲看到一个edit链接.点击这个链接,你会进入一个可以编辑的页面,不要点击save
按钮!我们还没有写相关的代码
保存编辑数据
因为在上一节我们做的表单中有一个"save"动作,所以我们我们需要在我们的controller中创建一个叫save的方法.如下面所示:
{{{
@turbogears.expose()
def save(self, pagename, data, submit):
hub.begin()
page = Page.byPagename(pagename)
page.data = data
hub.commit()
hub.end()
turbogears.flash("Changes saved!")
raise cherrypy.HTTPRedirect(turbogears.url("/", pagename=pagename)) }}}
因为表单会提交所有的变量,所以我们添加了submit参数.如果我们不这么做,python就会抱怨说有一个计划外参数.
另外一种避免这个抱怨的方式是用**keywords变量,同时我们需要import cherrypy来进行页面重定向.
在这段代码中一些值得注意的:
1.不像前面我们编写的方法,这个save方法没有expose任何模板.这是因为在这个方法中我们最后会重定向到其他页面
2.hub.begin()开始一个事务.就目前这个wiki来说我们根本不需要事务,但是用事务是个好习惯
3."page.data=data"会幕后处理一切与更新数据相关的工作
4.turbogears.flash()会在页面上显示一个消息,你在master.kid模板里看到一个tg_flash变量
5.由于HTTPRedirect是一个异常,HTTPRedirect下面所有的代码都不会执行,非常方便!
搞定!现在我们来试一试,你可以对页面进行编辑然后保存,很像一个wiki了,对不?