本站原创:转帖请标明转自: 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
复制代码

显示成功监听 8080端口
ctrl+c退出
而后在火狐中打开 http://127.0.0.1:8080/hello/abc http://127.0.0.1:8080/hello/python520.com 等等
