距离我在《web.py应用工具库:webpyext 》里说要换用bottle,已经过去快两个月了……其实在那之前我已经开始着手在换了。目前那个用于 Backbone.js 介绍的例子程序已经完成更换,其它一些原来基于web.py的应用也在逐步重写中。期间各种小坑不断,还好至今还没有碰到什么大坑……不过目测应该也不会有大坑。
unicode
作为非英文应用的开发者,unicode是一个绕不过去的坑。 web.py 对此是不作处理的,全都按原编码方式处理。 bottle 则作了一个有点奇怪的处理:
request.query 或 request.forms 都是一个 FormDict 类型,其特点是:当以属性方式访问数据时——如 request.query.foo,返回的结果是 unicode ,当以字典试访问数据时——如 request.query['foo'],则返回的结果是原编码字符串。混合使用的时候,一不小心就会出问题……
比如大部分时候都用属性方式,但是某个数据需要有特定默认值的时候,就会习惯性地用字典方式操作: request.query.get("foo", "bar") ,这时就容易出编码错误。这种情况应该使用 request.query.getunicode() 函数。
更彻底的方式是用 args=request.query.decode("utf-8") 然后 args.foo 或 args["foo"] 就都可以返回 unicode 了。
至于在实际应用中要用哪种方式来处理,就自己看情况选择了。
cookies
bottle 在这点上比 web.py 要坑,问题主要是出在 path 上。
web.py 的 setcookie 函数参数选择很少,比如 path 就没有,默认只能存放于"/",虽然这算是一个小小的限制,但使用中基本不会有什么问题。
但是bottle就坑了,它的 set_cookie 的默认 path 是当前路径,也就是说,在这个页面上存入的 cookie 在别的页面通常是取不到的,不熟悉这点的人几乎都要栽在这里。
而且更坑的一点是: set_cookie 有 path 参数可以指定 path ,但是 get_cookie 却可耻地没有这个 path 参数可选——也就是说,你即使设置了其它 path ,如果 get_cookie 的时候不是刚好在那个 path 下的话,也取不到……
这个……反正我现在能用的办法就是跟 web.py 里一样,把所有的 cookie 都放到"/"下面,至少目前用下来感觉没问题。
除了这个坑以外,相比 web.py 的 cookie , bottle 还有一点不算不足但有时不太方便的地方:
web.py 的 cookie 可以存放任何可持久化的数据,比如 dict/list 。但是 bottle 的 cookie 似乎只能放字符串,我试过放 list 出错。
当然这不是什么大问题,用一个 json.dumps/json.loads 即可解决。
分享到:
相关推荐
Bottle是一个简单高效的遵循WSGI的微型python+Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。&oq=Bottle是一个简单高效的遵循WSGI的微型python+Web框架。说微型,是因为它...
用python的bottle.py写的一个留言本,基于sqlite3数据库。 可以作为一个bottle练笔的小例子
android Magic_bottle android Magic_bottle
bottle核心库
python的 bottle小型框架
bottle-master
bottle web框架, bottle0.9说明文档,样例等
bottle web开发 项目实战:任务管理系统,是学习pyhton的好项目。可以开发成博客系统,python是比较火
这个例子演示了如何使用bottle为APP开发API,并将相关的数据写入到数据库中。 1.开发环境相关: python 2.6 mysql使用默认端口3306 在windows7下开发,在centos 6.3上运行正常,mysql与服务器部署在同一个机器上。 ...
bottle开发文档
bottle-demo 基于sqlite3 和bottle 使用示例
python bottle v0.11中文文档
轻量级框架Bottle虽然看起来简单,但具体到自己动手实践,还是会踩到烂各种坑。我在这里把自己踩过的坑记...
对于bottle的基本操作结合实际的例子,里面的内容包含,一些例子的源代码,和一个快速入门,主要针对例子的详细解释。 主要讲解了如果使用python建立留言薄(txt为数据库的),一个登陆界面。 和静态文件的结合的...
论文“Deep Variational information bottleneck”阅读笔记
基于Bottle的Python网络应用开发.pdf
使用python的bottle框架开发的一个留言本的实例,此实例在apache的wsgi模式下工作良好,第一次学习,有很多疏漏希望大家多多指教http://www.richdata.org/archives-209-richdata.html
前端项目-bottleneck,Async rate limiter
bottle documentation v0.11.dev HTML (zip) for offline use.
避免ERROR: Failed building wheel for bottleneck