(最近忙,發點舊文湊數-_-|||,這是三月份試用twisted時記的一點筆記)
twisted是乙個功能極為強大的非同步網路應用開發庫——當然是python的。印象中大概也就只有ace有這麼強悍,但twisted在易用性方面要好很多——這其中當然少不了python的功勞(ace是用c++的)。
這是乙個很好的思路。所以twisted提供了一套web開發環境以實現這樣的目的。
關於twisted.web部分的開發,官方的文件 顯得太過於簡單了,特別是連基本的request物件的參考文件都沒有。還好gashero整理了一部分在《twisted的web開發 》,引用一下(有補充):
channel :包含上級的http協議物件。
transport :通訊物件。
method :http方法,如get和post。
uri :全部請求的uri。
path :具體的請求路徑,不含引數。
args :請求引數,包括url引數和post引數。格式如 。
received_headers :請求報文的頭字段。
received_cookies :請求報文的cookie。
content :請求報文的實體主體,檔案物件。
clientproto :發出請求的客戶端的http版本。
client :請求的客戶端位址物件,包括type、host和port屬性,分別記錄協議(這裡固定為tcp)、ip和埠號
host :本機接收請求的位址物件
getheader(key) :獲取請求的頭字段。
getcookie(key) :獲取請求的cookie。
getallheaders() :所有請求的頭字段字典,就是返回received_headers。
getrequesthostname() :請求的host欄位,不含埠號。
gethost() :原始請求的通訊位址,返回host。
getclientip() :獲取客戶端ip。
getuser() :獲取basic驗證中的使用者名稱。
getpassword() :獲取basic驗證中的密碼。
getclient() :獲取客戶端位址物件
乙個最基本的web應用如下:
然後執行起來就可以通過url:http://localhost:8080 訪問這個程式的頁面了。
注意其中的的isleaf是必須的。不過也還有另一種方法可以實現同樣的功能:
現在可以通過url:http://localhost:8080/child 訪問這個子頁面了。不過生成子頁面還有乙個動態的辦法:
現在可以試試url:http://localhost:8080/1234 訪問了。其中1234可以換成任何數字(實際上上面的程式對此未作限制,即使輸入任何字元也是可以的)。
接下來是靜態內容的使用:
訪問一下url:http://localhost:8080/static 試試就知道了。
這些對於web開發都是些基本的功能,稍微複雜一點的網頁要做起來還是很痛苦的。但是python是很靈活的東西,資源也很豐富,所以實際上問題也不大。比如在getchild方法裡加上routing的實現,再加乙個mako一類的模板,功能立即強大很多(貌似搞得像pylons了)——只是資料庫操作還是需要謹慎一些,簡單地加上sqlalchemy之類的orm也不是不行,但是它對資料庫的訪問是阻塞式的,可能導致twisted應用的效能下降很大。
所幸的是一般來說為twisted應用增加web互動介面很少還有需要運算元據庫的,即使必須要有,twisted也提供了非同步的資料庫訪問介面——雖然功能不可能像sqlalchemy那麼強大,對於簡單的應用應該也足夠了。
雖然web介面已經很方便了,但也許還會有人想要用互動式gui,這也沒問題。twisted的web庫提供了對xmlrpc和soap的支援。以簡單一些的xmlrpc為例:
客戶端的呼叫方式是:
上面的**執行後將回顯。
實際上xmlrpc物件也是一種resource,所以也可以簡單地用putchild放到子目錄下去。或者如果需要對xmlrpc的request進行控制——比如增加authentication或者其它的客戶端呼叫限制,可以在_cbrender方法裡實現,具體可參考web.xmlrpc的原始碼。
Twisted之web開發(一)
site objects 負責建立httpchannel例項來解析http請求,也負責執行。包括url的根部資源。recource 相當於乙個單獨的url欄位。iresiurce介面負責描述資源物件的方法 負責定義所有的url,相當於乙個對映表 rpy scripts 是twisted.web靜態資...
JAVA開發應用 筆記
jdk1.5新增的功能 字元流和位元組流的區別,使用場景,相關類 執行緒安全的概念,實現執行緒安全的幾種方法 抽象類和介面的區別,使用場景 hash演算法的實現原理,hashcode的實現原理 error和exception的區別,runtimeexception和非runtimeexception...
web應用開發編碼
說明 日常開發中,編碼問題是經常出現的,下面是日常積累以及查閱資料彙總的相應解決方法。page contenttype text html charset gbk 或 response.setcharacterencoding page pageencoding utf 8 1 post表單提交 r...