web.py 是一個python 的web 架構,它簡單而且功能強大。web.py 是公開的,無論用于什麼用途都是沒有限制的。
先讓大家感受一下web.py 的簡單而強大:
看看,上面就是一個基于web.py 的完整的web 應用。不信?!将上面的代碼儲存為檔案code.py,在指令行下執行python
code.py。然後打開你的浏覽器,打開位址:http://localhost:8080/rosswan,看看結
果 :)沒有意外的話(當然要先安裝web.py,下面會有介紹),浏覽器會顯示“hello, rosswan!”。這是一個最簡單的hello
world web 應用。是不是很簡單?!下面将較為詳細地介紹下web.py 。find fun :)
1. 安裝
setup.py install,在linux 等系統下,需要root 的權限,可以執行:sudo python setup.py install。
安裝完畢之後,就可以正式開始web.py 之旅…
2. url 處理
在每個web.py 應用,必須先import web 子產品:
現在,我們須要告訴web.py url 如何組織,讓我們以一個簡單例子開始:
在上面的例子中,第一部分(‘/’)是一個比對url 的正規表達式,像/,/help/faq,/item/(\d+),等等;第二部分(‘index’)是一個類名,比對的請求将會被發送過去。
現在,我們需要編寫index 類。當大部人浏覽網頁的時候,他們都沒有注意到,浏覽器是通過http 跟world wide web 通信的。通信的細節不太重要,但要明白一點,使用者是通過urls(例如 / 或者 /foo?f=1)來請求web 伺服器完成一定請求的(例如 get 或者post)。
get 是最普遍的方法,用來請求一個頁面。當我們在浏覽器裡輸入“harvard.edu” 的時候,實際上它是向web 伺服器請求get ”/“。另一個常見的方法是post,常用于送出特定類型的表單,例如利用信用卡付費和處理一個訂單。注意,get urls 能夠被搜尋引擎索引得到(想像一下google 嘗試購買你網站上的所用物品)。
在我們的web.py 代碼中。我們清晰區分這兩種方法:
當接收到一個get 請求時,上面的get 方法将會被web.py 調用。
好的。現在,我們隻需添加最後一行代碼,讓web.py 啟動網頁應用:
上面告訴web.py 如何配置urls,以及找尋的類在檔案中的全局命名空間。
整個code.py 檔案的内容如下:
注意到沒有,雖然我說了很多東西,但實際上web 應用的代碼就隻得上面的幾行,而且這是一個完整的web.py 應用。在你的指令行下輸入:
現在,你的web.py 應用已經啟動了伺服器。通過浏覽器通路http://localhost:8080/ 的話,會見到”hello,
world!“。在啟動伺服器的時候,你可以在python code.py 後面添加ip
位址/端口 來控制web.py 啟動的伺服器。例如:python code.py 8888。
3. 調試
web.py 本身也提供調試的工具。在最後的“if name …” 代碼前面添加:
并在最後的“if
name …” 添加”web.reloader“:
上面的代碼會使你在調試的階段得到更多有用的資訊。web.reloader 其實是一個中間件,當你在運作時修改了code.py 檔案後,web.reloader 會重新加載code.py 檔案,讓你在浏覽器上立刻可以看到變化。如何有多何變化的話,還是需要重新啟動伺服器。web.py
也提供web.profiler ,可以輸出有用的資訊,有關每個頁面的每個函數調用的次數,這用助于你改善代碼。
4. 模闆
在python 裡面編寫html 代碼是相當累贅的,而在html 裡嵌入python 代碼則有趣得多。幸運地,web.py 使這過程變得相當容易。
在我們的web 應用裡,添加一個新的檔案夾用來組織模闆檔案(例如”/templates“)。然後再建立一個html 檔案(例如:”index.html“):
或者,你可以用web.py 的模闆語言用編寫這個html 檔案:
注意上面代碼的縮進!
正如你所見的,上面的模闆看上去跟這python 檔案很相似,以def with 語句開始,但在關鍵字前需要添加”$“。
注意:在模闆内的變量,如果包含有html 标記,以$ 方式引用變量的話,html 标記隻會以純文字的顯示出來。要想html 标記産生效果,可以用$: 引用變量。
現在,回到code.py 檔案,在”import web” 的下一行添加:
這告訴web.py 在哪裡可以搜尋得到模闆目錄。
提示:可在render 調用裡添加cache = false 使得每次通路頁面時都重載模闆。
下面繼續修改code.py 檔案的get 方法:
上面的”index“ 是模闆的名字,”name“ 是傳遞過去的參數。
修改code.py 檔案的urls 變量:
上面的“/(.*)” 是一個正規表達式。
再将get 方法修改如下:
現在,通路”/“的話,會顯示”hello, world!“;通路”/joe“ 的話,會顯示”i
just want to say hello to joe“。
5. 資料庫
添加以下代碼,則可以正确配置你的資料庫:
現在,先行在資料庫裡建立一個簡單的表:
初始化一行:
回到code.py,修改get 方法如下:
修改urls 變量:
重新編輯index.html 檔案如下:
現在,可以通路”/“,如果顯示”learn web.py“,則祝賀你成功了!
現在,再讓我們看看如何向資料庫寫入。
在index.html 檔案的尾部添加如下内容:
修改code.py 檔案的urls 變量如下:
在code.py 裡添加一個類:
web.input 使你能夠友善地通路使用者通過表單送出上來的變量。web.insert 用于向資料庫的 “todo” 表插入資料,并且傳回新插入行的id。web.seeother 用于重轉向到”/“。
提示:對于資料庫的操作,還有web.transact(), web.commit(), web.rollback(),web.update()。
在web.py 裡,還有web.input,web.query 和其它的函數,傳回”storage objects”,可以像字典型類(dictionaries) 的使用。
6. 總結
這篇教程到這裡也要結束了,如果你對web.py 有興趣,可以搜尋更多關于web.py 的文檔看看,你一定會發現更酷的東西。have fun!