本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7611218
建立时间:2006年5月29日




[Python]web.py 进阶2,连接 MySQL 数据库,以及其它的一些内容
软件技术

lhwork 发表于 2007/2/6 16:38:18

第一部分在这里 申明一点,这里的例子都是基于 web.py 0.2 版本的。现在网上的 web.py 中文教程是基于 0.1 的,如果你看到的文章一开始说要安装什么 Cheetah,那肯定不适用现在的情况了。 首先说的是 Python 连 MySQL,以及 UTF-8 字符集的事情。我这里假设你的应用是纯 UTF-8 的,而且使用 MySQL 4.1 以上的版本。 Python for MySQL 的连接扩展在 mysql-python,Debian Sarge 的包里面是 1.2.1c2 版,是不支持 4.1 的 Charset 特性的,最新的 1.2.1_p2 版支持的很好,只不过从这个版本开始必须依赖 Python2.4 了。 当使用 mysql-python connect()的时候有两个重要参数,charset,use_unicode。charset 就是指定连接以后 set names 的字符集;use_unicode 则指定 fetch result 的结果是用 'unicode string' or 'string' 类型 ? 由于最后输出的模板都是按照 string 来解析的,为了能正确运算,必须把这里设置成 0 web.py 类似 Java Servelet,可以在程序出错的时候抛出一大块异常;而且因为直接处理所有的 URL,所以它也内置一个自定义 url not found 的机制。 例子:首先是初始化部分的代码 def mynotfound(): render = web.template.render('templates/') print render._404() web.webapi.internalerror = web.debugerror web.webapi.notfound = mynotfound if __name__ == "__main__": import os os.environ['PHP_FCGI_CHILDREN'] = "1" #FastCGI 运行模式 web.config.db_parameters = dict(dbn='mysql', user='webpy', pw='passwordofwebpy', \ host='localhost',port=3306,db='club',charset='utf8',\ use_unicode=0) web.run(urls, globals())上面定义了新的 404 处理函数以及用 web.debugerror 代替原来的 500 处理函数,debugerror 可以抛出一个非常漂亮的异常页面。在 __main__ 函数里面设定了 mysql 的连接参数,这里连接到一个叫 club 的数据库 增加一个对所有以 'sample/' 开头的 URL 分发类 samples urls = ( '/sample', 'sample', '/sample/(.*)', 'samples', '/(.*)', 'hello' ) class samples: GET = web.autodelegate('GET_') POST = web.autodelegate('POST_') def show_signup(self, users): render = web.template.render('templates/sample/') print render.signup(users) def GET_signup(self): users = web.select('user') self.show_signup(users) def POST_signup(self): i = web.input() web.insert('user', user_name=i.user_name, user_email=i.user_email, user_passport=i.user_passport) users = web.select('user') self.show_signup(users) 注意:这里用了 autodelegate ,来把 sample/abc 的 GET 方法转到 GET_abc 方法去处理 运行实例: 访问 http://www.dup2.net/papp/sample/notfound 可以看到我自定义的 _404 输出结果 访问 http://www.dup2.net/papp/sample/signup可以执行我这里访问 MySQL 的例子. 我这里的 email 是设置成 unique key 的,这样可以在这个页面提交表单内容里面把 email 赋值为已经存在的 email,比如 spam@notinput-realemail-here.org,哈,就可以看到一个很帅的异常了..


阅读全文(7425) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144794646 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号