下面接着说说google application engine和webpy配套的问题。在我完成留言板的时候,这方面的资料还是很少,中文资料更少,希望webpy社区能够壮大啊。
gae据说很有Django的风格,也是内置Django的,而web.py则需要自备。因此,在应用目录中应该放入web.py解压后得到的web目录。否则会导致Import error: no module named web
详细的发布过程,可以参考chinaunix的这篇文章:http://bbs.chinaunix.net/viewthread.php?tid=1487470 [笔记]Google App Engine上试用web.py
由于gae的限制,应用的模板文件需要编译后才能在gae上执行读取,否则会导致No module named templates 。上面的文章有具体的解决办法。
注意,源代码的app.run()需要改成main=app.cgirun()才能正常工作。 否则会导致ImportError: No module named flup.server.fcgi
另外,我在Ubuntu下多次上传都失败了,提示Import error: no module named web,无奈之下转到win中就成功上传了,不确定是图形界面的google app engine launcher比较厉害还是python sdk的appserver有问题。
gae上面只能使用google的数据库,使用称为gql的查询语言。
要定义一个表:
from google.appengine.ext import db
class data(db.Model):
content=db.StringProperty(multiline=True)
date=db.DataTimeProperty(auto_now_add=True)
title=db.StringProperty(multiline=False)
myKey=db.StringProperty(multiline=False)
为了索引记录,我用了一个笨方法,在记录中增加一个myKey字段来记录每个记录的Key值。Key是google用来定位每一条记录的内置属性。通过str函数,可以从key得到唯一的字串。
查询一条记录:
db.get(db.Key(myKey))
批量查询:
db.GqlQuery("SELECT * FROM data ORDER BY date DESC")
插入记录:
record=data()
#设置record的相关属性
record.put()
删除记录:
q=db.get(db.Key(myKey))
db.delete(q)
更多关于gae的数据库信息,可以参考gae的官方文档(有中文版)。
与python自带的web server不同,在gae中print语句也是直接输出到浏览器而不是服务器的日志中。 像是一个典型的cgi应用。
比较有参考价值的文章:http://hi.baidu.com/xusx/blog/item/801704fa5d84259258ee90dd.html 手把手教程,没读完
http://baiduer.net/2010/03/05/使用webpy创建一个blog/ 另一个手把手。。。
最后推荐几个用python写的blog: http://maoxingxu.appspot.com 这个是国内的技术人写的。
http://www.k4ml.com/archive/old/page165.html 这个风格很简洁。。。
http://webpy.appspot.com 这个非常值得参考,似乎就是webpy的人写出来的。
http://micolog.appspot.com/zh-cn 目前比较通用的blog,可以直接使用。
我的留言本源代码:/Files/Lifehacker/myApp.7z
ps:appspot需要FQ访问