本站原創:轉帖請標明轉自: 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 等等
而後在咱們的監控窗口顯示咱們請求的每條記錄: