本站原创:转帖请标明转自: http://bbs.python520.com
本文转自: http://bbs.python520.com/thread-673-1-1.html
bottle是个非常小巧的python web 框架,只有一个文件,3000多行,代码也差不多都读了一遍。发现的确不错。现在推荐给大家
关于bottle的一些搭配
- ORM
ORM我选用了简单的autumn,因为并不会用到复杂的关系数据。 - 模板
模板使用 jinja2,本身贴近django模板的语法,用起来也很熟悉。 - form类
form类使用 WTForms。
要使他们协作起来是件麻烦的事情,最麻烦的就是unicode的问题。
本着输入的最开始就要转成unicode,输出之前才转成bytes的原则,在使用这些类的时候有一下几点要遵循:
0.autumn在连接MySQL的时候,一定要用 use_unicode=True,这样从MySQL获取的数据才默认是unicode的
- autumn_db.conn.connect(
- DATABASE['engine'],
- db=DATABASE['db'],
- user=DATABASE['user'],
- passwd=DATABASE['passwd'],
- host=DATABASE['host'],
- port=DATABASE['port'],
- use_unicode=True
- )
复制代码
- 使用WTForms的时候,要使用 form = RegForm(obj=request.forms) 的方式(bottle要使用0.10),这样才能form的数据才会默认就是unicode
- autumn 的Model传入的参数必须是unicode,而仅仅如此还是不行的,由于MySQLdb的bug(我个人认为),要求excute函数传入的 values必须是bytes类型,而sqlite3则要求传入unicode,所以我们要改一下autumn的代码,在query.py的190行增加 代码:
- #Add-Begin by dantezhu in 2011-11-14 12:17:10
- if db.conn.dbtype == 'mysql':
- values = [it.encode('utf8') if isinstance(it, unicode) else it for it in values]
- #Add-End
复制代码
并在connection.py第6行增加如下代码:- #Add-Begin by dantezhu in 2011-12-16 01:56:34
- self.dbtype = dbtype
- #Add-End
复制代码
OK,到此为止大功告成!
所有的组件都是我们可拆卸的,如果网站够简单,可以只有一个bottle;如果网站太复杂,我们可以任意的添加自己需要的模块,而且它们是真正做事的。
这还只是个开始
说了这么多。接下讲点最简单的入门
bottle 官方网站:http://bottlepy.org/
首先下载 bottle https://github.com/defnull/bottle/raw/master/bottle.py
把 bottle.py 放到目标文件夹
新建1.py:- from bottle import route, run
- #team:bbs.python520.com
- @route('/hello/:name')
- def index(name='World'):
- return '<b>Hello %s!</b>' % name
- run(host='localhost', port=8080)
复制代码
- python 1.py
复制代码
![](http://bbs.python520.com/data/attachment/forum/201204/27/22494777f526rp107mbdz7.png)
显示成功监听 8080端口
ctrl+c退出
然后在火狐中打开 http://127.0.0.1:8080/hello/abc http://127.0.0.1:8080/hello/python520.com 等等
![](http://bbs.python520.com/data/attachment/forum/201204/27/225216zo9z999dlte39csz.png)
然后在我们的监控窗口显示我们请求的每条记录: