天天看點

簡單而直接的Python web 架構:web.py

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!