Buy Reviews
Powered by MaxBlogPress  

Archive for the ‘Python’ Category

GAE Python Rewrite Blogger post views

星期四, 八月 26th, 2010點閱人數:18次

記得上個月底,ㄚ琪很想Blogger 可以有WP-PostRating和WP-PostViews這樣的功能ㄚ琪還在沾沾自喜安裝了Blogger 點閱次數測試成功,但是你絕對想不到,它永遠都是1,不管你怎麼給它點,點文章進去,都是1,這個1搞得我有點火大了 ,還好akiko有提醒我,不然我永遠不會知道這個事實。看來求人不如求己,ㄚ琪這兩三天只好抱病來寫Blogger post views,Google了很久,發現有一個很大的問題就是,這一類的程式常常會因為程式主機不再服務,而無法使用顯示文章閱覽人次的功能。另一個問題是Blogger的Template還真有夠難搞的,它偏偏就要跟人家的搞不一樣的系統。

第一個問題還滿好解決的,雖然對我來說也不盡然,但是只要你有主機,放支程式進去就可以跑了,你可以參考Individual Post Views Counter For Blogger – Using Your Own Web Host,用PHP寫的程式,來實現文章閱覽人次的功能,但是我想會使用Blogger的人應該沒有自己的主機吧!如果放在免費的主機上面,或許也行得通,但是什麼時候會陣亡不清楚。好吧!我們是用Blogger的老闆是Google,那麼用Google的主機好了,反正如果Google倒了的話,那麼Blogger跟主機就一齊不能用,那問題就不大,雖然問題還是很大,因為如果你寫了一大坨的文章,發現Google倒了的話,那會事情很大條的,所以要有危安意識,隨時記得要備份文章。

好了廢話一堆,Google的主機也算很難搞,沒有PHP程式可以放,只有Python跟Java可放,這是用Google 應用服務引擎來實現的,還好ㄚ琪以前有看過書Google 應用服務引擎,自認為不是很難,所以就捲起袖子來做了,試了很久,終於有眉目了,當然Tony的GAE Java Blogger PageView count,給了我很大的幫助,當然他有暗藏一些步數,沒有寫出來,而且也是用Java做的,我想我已經用Python試了一會兒了,不想再用Java來做,雖然也是可以,而且可以練SCJP的功力,不過我想Google是很偏好Python的,所以如果以後想去Google上班,會Python應該不可少。當然你要完成這個工作,你還得下載Python 專用的 Google 應用服務引擎 SDK

好了,這也不是重點,最重點就是Blogger 難搞的Template要應付了,我從Tony的<data:post.id/>、

<b:if cond='data:blog.pageType == "item"'>、expr:src

這幾個方向試了很久,發現裡面還有一些眉眉角角的,研究自己的Template終於搞出來了,哈哈!

你一定很想知道ㄚ琪是怎麼完成這個曠世巨作的吧,就讓我來揭開這個神秘面紗吧!

<h3 class=’post-title entry-title’>

<b:if cond=’data:post.link’>

<a expr:href=’data:post.link’><data:post.title/></a>

<b:else/>

<b:if cond=’data:post.url’>

<a expr:href=’data:post.url’><data:post.title/></a>

<b:else/>

<data:post.title/>

</b:if>

</b:if>

</h3>

你在Templeate中注意到這幾行,然後在後面加上

<b:if cond=’data:blog.pageType == &quot;item&quot;’>

psot views:<script expr:src=’&quot;http://tw-counter.appspot.com/?b=1664225421371581189&amp;p=&quot; + data:post.id + &quot;&amp;t=&quot; + data:post.title + &quot;&amp;y=1&quot;’/>

<b:else/>

psot views:<script expr:src=’&quot;http://tw-counter.appspot.com/?b=1664225421371581189&amp;p=&quot; + data:post.id + &quot;&amp;t=&quot; + data:post.title + &quot;&amp;y=0&quot;’/>

</b:if>

ㄚ琪研發的這幾行代碼,就是&quot;、+、&amp;這幾個符號讓我搞了大半天的,好了,完工!

對了,你絕對不可以複製這幾行到你的Template中喔,因為這個1664225421371581189是我的BlogID,你copy了一樣功能無法用,你改成你的BlogID也無法用,因為怕Google關掉這免費主機,只因你的龐大的流量造成的。

那怎麼辦?,好吧,只要你幫ㄚ琪推薦Fun Taiwan,將http://funtaiwan.achi.idv.tw放到你的Blog中,並且訂閱Fun Taiwan的RSS,在ㄚ琪又要送飲料囉!回覆你放我的連結處,以及你的BlogID,我就可以幫你開通使用這個功能,現在到8/6止還可以抽獎送飲料喔,歡迎你來使用,這個功能的Demo網站:http://funtaiwan.achi.idv.tw

Python的XML編碼跟解碼,’xmlcharrefreplace’

星期四, 八月 5th, 2010點閱人數:13次

今天在酷!學園看到一個問題:

Python版本:2.3
請問若是我將一字串從unicode轉成XML格式的字元編碼,如何再重XML格式編碼轉成unicode呢?
如:
text = u”1月1日”
text2 = text.encode(‘ascii’,'xmlcharrefreplace’)
print text2   #顯示    1&#26376;1&#26085;
請問我要怎樣做才能將[1&#26376;1&#26085;]字串變回”1月1日”呢?

ㄚ琪想想好像以前有碰過這類問題,所以就Google一下如何解法?終於找到了,就是使用Beautiful Soup模組!

解法如下:

# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulStoneSoup
text = u”1月1日”
text2 = text.encode(‘ascii’,'xmlcharrefreplace’)
print text2
decodedString=unicode(BeautifulStoneSoup(text2,convertEntities=BeautifulStoneSoup.HTML_ENTITIES ))
print decodedString

結構風工程知識管理平台架構之探討與建置論文研讀

星期四, 四月 1st, 2010點閱人數:73次

今天很好奇Python在學術界上的使用情形,就上了國家圖書館的全國博碩士論文資訊網查查Python的使用情形,看到了這一篇結構風工程知識管理平台架構之探討與建置,我就在想,這一個系統應該是學土木的來做,還是像我學資管來做的好,這個結構風工程確實是有關土木工程學的知識的,但是這篇論文著重在系統的架構上,而且看起來就像是使用Python、Zope、Plone、OpenWebmail、MySQL這些軟體架構出來的!

裡面的土木學工程,應該算是資訊的儲存吧!所以我覺得不會土木的我也可以做,只要你跟我講要做哪些資料庫,我想就可以建構出來了!

然後,論文的結論說了一下貢獻:

1.經由「結構風工程知識管理平台」可將風工程研究中心內每個成員的知識進行整合,讓風工程的研究結果具有整體性,提供未來在進行風工程研究工作時一個完整的知識庫。

或許吧,可以提供這樣的平台分享總是好的!

2.本系統整合網路郵局的各項功能,使用者可透過本系統進行電子郵件處理、行事曆安排與檔案資料傳遞等工作利用網路的功能即可不受時空的限制進行日常的工作。

其實我感到不解的是,為何把OpenWebmail弄進來,就只是為了架個伺服器?那還不如使用Google的Gmail好了,那至於Python有mail伺服器可以用嗎?搞個Python做的mail Server或許不錯,又或者在Plone系統上,直接建構類似的功能應該也不錯!

3.新世紀的工作型態不再是一人獨自完成一件工作的型態,群體化的團隊合作形式將是無可避免的趨勢。在系統群體溝通的管道下,群組內的成員可及時的獲取訊息與資源,達到增加工作效率的目的。

講得好聽,但是看不出來有否把專案管理的功能加上去,這應該不是目前系統上可以看到的,如果只是訊息的分享,嗯,這裡只是好聽的一句話!

4.本系統建置網路化的工作平台提供專業性的資料計算與查詢功能,讓研究高層建築風工程的人員可即時得到相關的風力係數與風力頻譜資料。

這個我不懂了,所以還是讓土木得來吧!

5.在本系統內,大部分的軟體皆採用「自由軟體」所建置而成,所以可節省許多軟體的費用,其中,使用ZOPE 在數據分析上的專案開發程式也可提供ZOPE 軟體的學習人員一個範例。

嗯,應該還有更多的自由軟體可以選擇,而且學習曲線更低,還有系統介面可能更漂亮!

此論文也有一下建議:

1.本系統主要所探討研究的乃是在「風工程研究中心」內建立知識管理模式的架構,所以本系統目前所呈現的部分僅有系統功能與系統輪廓(framework)等部分,至於「知識庫」的內容,需要研究中心內的成員輸入大量的資料後才可建立一個完整的知識庫。

所以說只是系統,並沒有知識庫,還得賴其他人的餵資料,能成就大業,那幹嘛,講那麼多知識管理的文獻,其實我比較想知道,忙得要死的那些人,怎樣來餵資料到系統上,這個我比較care!

2.在本系統完成後,必須先對研究中心的成員進行人員訓練,讓每一位成員都瞭解系統使用的方法;在使用系統之時,我們也必須檢視自身研究工作的流程,改變傳統的工作方式,讓此系統成為我們研究工作的一部分,如此才可有效提昇工作效率。

我一直在想是不是有一種系統不要進行訓練就可以來用的,不然沒有願意花時間來學習吧!我就是懶,沒錯!

3.在專案系統工作平台上,本系統僅進行高層建築數據分析的處理部分,未來可建立風工程研究中心其餘組別之網路工作平台,讓本系統所建立的知識庫更加完整。

所以要有高層建築的知識才能建構這個系統,我在想能不能聰明點,讓系統自己有知識加入其他的知識進來,詭異吧!

4.在個人工作環境中有一行程日曆表,在系統中也有一群體行程日曆表,未來可將兩個日曆表上安排行程相互整合,在檢視行程時可同時檢視個人與群體的行程。

所以說確實沒整合在一起!才有這個建議!

5.由於本系統以Python 語言所撰寫的ZOPE 建立,系統有些部分需要修改Python 原始碼或建立新的模組,所以在程式的寫作與修改上需花費較多的時間,在有限的時間內並無法做到盡善盡美,只能發展出功能的雛形,將來可針對細節部分進行更完善的修改。

沒錯,確實學習曲線有點比其他的工具長了,這就是我質疑的地方,學土木的人當真要學這個Python?

6.研究目前所建置的「知識管理平台」針對風工程研究中心內的成員,尚未整合風工程專家系統與規範查詢系統等功能,未來在整合此兩套系統後,必須將系統進行修訂或改正。

如果有專家系統加進來,那真有得瞧了!

7.本研究所建立的知識管理系統包括表2-1 中所述部分的知識活動管理工具與機制,例如:知識搜尋、知識應用與知識儲存等等。但是在知識移轉與知識創造的知識活動中,本系統並未建立相關的管理工具,日後在擴充本系統功能時,可將此兩部分的知識活動內容新增至本系統中,使知識管理系統的內涵更加完整。

漂亮,用知識管理的術語來解釋,但是如果是我可能就會用,新增、查詢、儲存這幾樣基本功能,知識應用的部份又又涉及到訓練的部份了!

表 2-1 知識活動之管理工具

2010-04-01_141723

我在想如果當初我用這樣的構想來建一個Python、ZopePlone、MySQL的入口網站的一個知識平台,不支會怎樣,我想會被幹瞧死吧!因為我做的東西,很多不需要那麼多的文獻探討,老師會累的,會說沒事不要放那麼多廢話充版面!這是我畢業後的感想,長了智慧了!

python 不同平台寫入excel

星期四, 四月 1st, 2010點閱人數:252次

之前都是用PHP跟perl來處理,所以也沒想到用python來寫入excel,不過可能還是有一些朋友需要用python來寫excel的,就來跟各位介紹xlwt套件吧!

這個函式庫用來建構跟MS Excel 97/2000/XP/2003 XLS檔案相容的試算表檔案,可以在任何平台上執行,使用Python 2.3到2.6版本。

xlwt是一個函式庫用來產生試算表檔案且可以跟Excel 97/2000/XP/2003、OpenOffice.org Calc跟Gnumeric相容的,xlwt有完整的Unicode支援,在任何平台上不需要Excel或COM的伺服器就可以產生Excel試算表,唯一的需求是Python 2.3到2.6的版本可以使用,xlwt是pyExcelerator一個分支。

論壇的評論,問題和錯誤報告:http://groups.google.com/group/python-excel

檔案 型態 Py版本 上傳時間 大小 # 下載次數
xlwt-0.7.2.tar.gz (md5) Source 2009-06-01 14:54:21.750613 112KB 5505
xlwt-0.7.2.win32.exe (md5)
Installer made with Python 2.5.4
MS Windows installer any 2009-06-01 14:46:54.689044 187KB 6301
xlwt-0.7.2.zip (md5) Source 2009-06-01 14:47:39.959549 128KB 8950

XML – 小心陌生人

星期三, 三月 24th, 2010點閱人數:87次

這一篇是Mark Pilgrim在2004/2/18寫的Beware of strangers中譯心得版,Mark Pilgrim現在在Google公司服務,看起來Google好像很喜歡用Python,所以可以好好讀一下這篇文章。

Universal Feed Parser 3.0 beta 18已經過時了,假如可以的話就用libxml2,Libxml2使用libiconv 來做大型的字元編碼轉換,包括中文,日文跟韓文等的編碼,其結果就是Universal Feed Parser會變得更普遍。

用libxml2來寫程式就像是異國的陌生人給你的一個扣人心弦的擁抱那樣,它似乎有可能滿足您的最瘋狂的夢想,但事好像在你的腦袋某個地方有個揮之不去的聲音警告你,你將糟糕地受騙上當。

Libxml2很快,我的意思是瘋狂的快,沒有別人可以接近它,它超級的快並且超級的符合它所宣稱支援所有的規格,它越來越快的同時,功能也越來越多,所以你只要知道在某個地方,有些人在出賣他們自己的靈魂,而你只會希望那不會是你。

這裡有一個真實故事:

對於Universal Feed Parser我有一個龐大而且越來越大的單元測試集,俺在很多種平台和條件下執行:Windows、OS X、Debian GNU/Linux、Python 2.1、Python 2.2、Python 2.3、Python的PyXML、Python的libxml2、Python的XML內建解析器,測試的架構已經很複雜,現在所要做的事情之一就是示範一個本地的HTTP伺服器來測試HTTP層跟XML層的相互影響(像是字元編碼),HTTP伺服器檢查自己的feed測試來拉出包含回應的自訂HTTP表頭的列表,它比我想的到的還要可怕。

今晚早些時候,我整合了libxml2支援, 當我用Windows下Python 2.3的libxml2 beta 18版跑了整套的單元測試,一個測試失敗了,它是獲取透過測試架構的HTTP伺服器的路由的一個測試,這失敗使它得很困難並且大大地增加了造成的問題比要測試的程式碼更多的事情。

拿掉libxml2,所有的測試就會通過,放回libxml2,相同的測試就會失敗,真是奇怪。

開啟my _debug旗標再重試那一個測試,它會印出一堆東西到stderr然後就… 通過了,關掉libxml2,第二次再回去試,難以置信的可以通過,關掉偵錯,重新執行那個測試,它還是可以通過,在它自己執行的時候這測試一直可以通過。

OK.測試的問題在大概#1100的某些地方,超過了2000個左右的測試,執行測試的前半部粉,他們通過了,就跟之前的一樣,執行測試的第二部份,他們全通過了,包括之前失敗的那一個,將所有的測試合起來執行︰就失敗了,關掉libxml2︰所有的測試都可以過,很詭異吧!

花時間來深入挖掘,它到底是哪裡錯誤?它不只是失敗;它實際上是掛了一會兒,然後失敗,所有的測試通常會在一秒鐘之內通過或失敗;在我用了四年多的筆電上,我可以用23秒執行2000個測試,除了這一個,它掛了 10秒鐘,然後失敗,呣,10秒鐘,feed解析器提出了一個10秒鐘的網路逾時,增加逾時值,瞧,現在它掛了20秒,然後失敗,我自訂的HTTP伺服器沒有回應,但是,只有在一個測試上,只有當我使用libxml2,增加了這困擾的聲音。

記住我的HTTP伺服器沒有呼叫libxml2,它只能從磁碟讀取檔案,或一個或兩個正規表示式的比對,然後印出原始資料,libxml2後來要晚一點才放進來。

是再次打開 _debug旗標的時候了,為了避免自己迷失在雪片般的廢話中,我增加了程式碼假如檔案名稱跟問題中的測試匹配就設定_debug = 1,重跑所有的測試並關掉libxml2作為控制,所有的測試通過,而且我抓了一個測試的偵錯資訊,太棒了,開啟libxml2,重跑,然後… 所有的測試通過。

仔細檢查程式碼;除了print敘述外從來就不會有_debug == 1的情形會發生,這個測試會在正常的情況下失敗,但是當你偵錯的時候卻可以通過,真是詭異,奇怪吧!

我很內疚的決定了移掉問題中的測試以及beta 18版的rm, cvs remove, cvs commit,希望沒有人會通知,嘿,這是測試版說,移掉偵錯碼,重跑整套的測試,所有的測試會通過… 除了測試現在是在我剛移掉那段程式碼的相同位置(#1100)。

OK,這一定是潛伏在測試架構中的很難找出的錯誤,(但是如果是這樣,為什麼libxml2會這樣不同呢?問問這惱人的聲音), HTTP伺服器是設定來服務一定數量的請求跟自我中斷,或許我有一個離一誤差(off-by-1 error)而且它會在服務最後一個測試前中斷,或者可能是沒有做好初始化,然後在第一個相關的HTTP測試時失敗,刺破了HTTP-相關測試的名單;沒有一個假設是對的,這個測試過去在#1101的時候可以通過,現在是在#1100的時候失敗,而且它跟先前我刪去地方的錯誤是一樣的,(很明確的,我覺得非常非常的內疚),不知何故,也不知哪個地方,在之間幾百個請求中libxml2會讓我的http伺服器失敗那麼一次。

再一次開啟 _debug = 1 的程式碼重跑,註解這個真錯得程式碼重跑,突然地又全過了,仔細檢查;是的,libxml2是啟用的,不,這不是我的幻覺,再重跑一次,全過,重開機,全過,我有做什麼不同的事嗎?我仔細的搜尋翻找,最後我看到了:我留了一個全域的_debug宣告沒有註解起來,把它註解起來;就錯誤,移掉註解,就又通過。

請注意只是想說在函式內的全域的_debug應該一點都不會有影響才對,假如你從沒在函式內設定_debug的話,它就像你從來沒有實行過的威脅一樣,這個程式碼就像海中的碎片一樣,然而它就是這樣:把它註解,失敗,宣告,成功,開啟libxml2,失敗,關掉libxml2,成功。

這個故事告訴我們:libxml2會導致無關的子系統失敗,除非你威脅它要進行偵錯

Postscript: 我決定在這個警告下釋放它,但是之後我發現在Python 2.1下有一個不相干的錯誤(而且不難理解,在修正了之後重跑測試,現在我已經不能再重新產生我所提到的錯誤了,我不斷的設定全域的_debug_debug = 1 以及開關libxml2數次以嘗試把這個非常錯誤的行為帶回,都無濟於事。

我發誓這曾發生過,這不是我的幻覺,但是我承認我不能證明給你看,你只能聽我說的話,在這時候,我的所有測試都可以通過,所以我要今晚停止寫程式並且在其他事情發生前釋放這個討厭的東西,使用但請自擔風險,並提防陌生人。

這篇看完之後,真是心有慼慼焉,常常碰到這種詭異的事,可是又無解,只好放手不管,把它交給神,過些時日,可能就不會有問題了,但是還是對自己的程式技術沒有長進,唉!真是辛苦的工作!

Python的Web架構

星期一, 三月 15th, 2010點閱人數:103次

一個Web架構是一批套件或模組用來允許開發者寫Web應用程式(見 WebApplications)或服務而不必處理像是協定、sockets、程序/執行緒管理等的細節。

大部分的Web架構都只有伺服端的技術,雖然AJAX越來越流行,有些Web架構也開始將AJAV程式碼加入來幫助開發者(客戶端)程式使用者瀏覽器的特殊供工作需求,在客戶端這裡Web架構是用web瀏覽器作為成熟應用執行環境的技術(例如gmail):見Web Browser Programming有更多細節。

當開發者使用架構時,通常會依某種慣例來撰寫程式碼以便讓你可以”插入(plugging in)架構”,代理溝通的責任、基礎設施跟低階的事物到架構中,然後我們在自己的程式碼中可以專注在應用程式的邏輯,這個Web開發的”插入”部份通常可以看成傳統的程式跟函式庫的分別那樣,而 “mainloop”符號派送事件到應用程式碼就很類似在Python 圖形使用者介面程式設計裡介紹的那樣。

通常架構提供一些活動像是解譯請求(取得表單參數、處理cookies跟sessions)、產生回應(提交資料為HTML或其他的格式)、持續不斷地儲存資料等等,由於一個非凡的Web應用程式會需要一些不同種類的抽象,通常這些抽象彼此互相堆疊,所以那些試著提供應用程式完整解決方案的架構通常也被稱作全棧(full-stack)架構,在這架構中他們嘗試提供站中每層的部件。

很多架構現在在他們的支援裡針對上述的活動跟抽象提供一點點的客制,利用只為某些特定東西所提供抽象的組件,因此,你幾乎可以完全從現有的組件來建構自己的全棧架構(full-stack framework)。

受歡迎的全棧架構

一個web應用程式可能使用一個基礎的HTTP應用程式伺服器、一個像是資料庫的儲存機制、一個樣板引擎、一個請求的調度器、一個認證模組跟一個AJAX工具包等的結合,這些可以是個別的組件或是在高階的架構中一起提供。

這些是最熱門的高階架構,很多架構的組件列在WebComponents這一頁。

  • Django (1.1版2009-07-29釋出) – 完美主義者的Web架構(有期限),Django使建構較好的網頁應用程式變得更容易且更快並且程式碼寫得更少,Django是高階的Python Web架構它鼓勵快速開發以及簡潔、務實的設計,它讓你建構高效能、更快地優雅的Web應用程式,Django盡可能地專注在自動化跟固守DRY (Don’t Repeat Yourself,不要自己重複)原則。 http://www.djangoproject.com/.
  • Grok (2009-10-07釋出1.0版,1.1版2010-05-18釋出)是在現有的zope 3函式庫上建構的,但目的是提供一種更容易的學習曲線和更靈活的開發經驗,它是藉著在組態及DRY(不重複自己)的慣例上來實作。
  • Pylons (2009-02-23釋出0.9.7版)是一種輕量級的web架構,強調靈活性和快速開發,它結合了世上Ruby、Python和Perl中最好的想法,提供一個結構,但非常靈活的Python web架構,它也是第一個充分利用新興的WSGI標準的專案,這個專案只有當你需要它時允許廣泛的再利用和靈活性,Pylons跳脫一般的思考方式努力使Web開發更快、彈性跟簡單,Pylons是在Paste(見下面)上建置的。
  • TurboGears (2009-05-27釋出2.0版) 你曾找過的快速Web開發的巨型架構,結合了SQLAlchemy (Model)Genshi (View)Pylons (Controller), RepozeTosca Widgets,在幾分鐘內建構一個資料庫導向、現成的擴充應用程式,有設計者友善的樣板、瀏覽器端簡單的AJAX跟伺服器端、一個令人難以置信威力很強且彈性的物件關聯對映(ORM),以及就像寫一個函式那樣自然的程式碼,在回顧了網站之後檢查:快速入門手冊
  • web2py (2009-11-10釋出1.72.3版,1.79.2版本2010-06-08 22:45:26釋出) 所有的東西打包在一個套件裡沒有任何相依的事件,應用程式的開發、部署、偵錯、測試、資料庫管理和維護可透過所提供的網絡界面來做,web2py沒有組態檔、不需要安裝、可以在USB隨身碟上執行,web2py使用Python的模型、檢視及控制器,內建一個報修系統來管理錯誤,國際化的引擎、透過ORM抽象層來跟MySQL、PostgreSQL、SQLite、Oracle、MSSQL跟Google應用引擎模式運作,web2py包括了處理HTML/XML、RSS、ATOM、CSV、RTF、JSON、AJAX、XMLRPC、WIKI標記等的函式庫,產品就緒,能夠上傳/下載很大的檔案以及向後相容。
  • Zope (2008-10-25釋出2.10.7版、2008-25-10釋出2.11.2版、2009-01-29釋出Zope 3.4.0版,Zope 3.4.1 2010-06-22釋出) 作為Python web 架構的始祖,多年來Zope已經發展了一系列的架構,Zope 1在1999年釋出,Zope 2是一個web架構也是一個通用的應用程式伺服器,今天它主要用於內容管理系統,Zope 3也是一個獨立的架構跟相關的函式庫收集,它也包括了新版的Zope 2,所有的Zope架構包括了ZODB、Python的物件資料庫。

下列見一些其他較冷門的全棧架構!

內容管理系統

內容管理系統(CMS)通常允許你建構對他們實用的應用程式,通常也提供很多在全棧架構中見到的特色,見內容管理系統更多詳細的資料。

Web組件

有些架構提供交互的組件像是樣板/輸出跟認證/授權之類的東西,所以你可以見到不同架構的使用者實際上會使用相同的組件或函式庫,見Web組件有像這樣組件的資料。

Web客戶端架構

相對於伺服器導向的架構藉由支援預先包裝(缺乏彈性、非常具體否則非常好用)的JavaScript組件來提供AJAX(異步JavaScript和XM)、提供像是JavaScript組件產生的請求的伺服端支援,Web客戶端架構採取了瀏覽器引擎動態功能的優點,在瀏覽器引擎個全部潛能中的方法可以被實現,舉例來說,透過編譯Python程式碼置入JavaScript或是內嵌一個Python解譯器到自己的Web瀏覽器中,在某些案例中,Web瀏覽器引擎可以執行在單獨訂製的應用程式裡而不是本質上的”web瀏覽器”中,見Web Browser Programming有更多詳細資料。

其他全棧架構

這些架構也提供很多但不是全部的技術堆疊,然而它們沒有那麼熱門所以沒列在上頭的架構中。

  • CubicWeb – 一個語意的web應用程式架構具有一個查詢語言、一個查詢加檢視的機制、多重資料庫、安全、工作流程、重複使用的組件等等的功能。
  • Enamel – 在Twisted、Nevow、Formal跟SQLAlchemy上的一個抽象層將他們的概念整合在單一的架構下。
  • Gizmo(QP) (2007-04-17釋出0.7版) 擴充了QP (見下面)添加了功能來幫忙建立豐富且嚴格的web介面,包括了一個用來支援(贅餘的)自動產生客戶端欄位驗證以及額外的json回呼。
  • Glashammer (2008-08-11釋出0.1.3版)是一個全棧的Python web架構強調簡單、彈性及擴充性,它是建構在優良的組件之上並且不用重新開發,WSGI、路由、版型、表單、 資料、外掛、程式碼、事件、SQLAlchemy、Storm、Couchdb、OpenID、AppEngine、Jquery等等。
  • Karrigell (2010-02-14釋出3.0.4版,3.1版2010-04-25釋出)是一個彈性的Python web架構,它有清晰直觀的語法,它獨立於任何資料庫、ORM或樣板引擎,並讓程式設計師在不同的程式碼樣市之間選擇。
  • Nagare – 一個web應用程式快速開發的方法,感謝它有進階的功能像是真正地自主跟可重用的組件、延伸、可程式化的HTML/XML、自動的AJAX繪製及資料庫ORM。
  • notmm (2010-03-09釋出0.3.4版,0.3.5版2010-04-12釋出) – 一個可擴展性和很多不同的web工具包架構在Django及其它組件上,notmm工具包是給Django開發者使用WSGI 1.0跟Django來建構自訂化web應用程式的進階Python API。
  • Porcupine (2009-07-18釋出0.6版)提供你建構以資料為中心的Web 2.0應用程式的需求,包括QuiX Javascript工具包跟Porcupine的物件查詢語言(POQL),需要Python 2.5或以上的版本 – 3.0版尚未包括進來。.
  • Pyroxide是建構在Apache的mod_python之上,它使用MVC (模型-視圖-控制器)模式以及其它的傳統物件導向模式,它抽離了mod_python層呈現一個很明智的物件導向架構,這樣開法者可以處理HTTP請求、HTTP回應、頁面控制器、視圖跟領域模型物件,它跟像是Prototype跟Mochikit的AJAX架構整合很好,它配備了一個優雅的ORM架構並且以Zope Page Templates (Simpletal 專案)執行的嚇嚇叫。
  • QP (2009-08-25釋出2.2版)  一個套件長久基於Durus所定義和執行多重Web應用程式,提供標準的持續性Session跟User類別,簡易的互動資料庫sessions,跟安全組裝html的QPY,套件需要在Python >= 2.4上執行,同樣的程式碼基礎包括Python 3.x上執行!
  • SkunkWeb (2004-09-10釋出3.4.0版)
  • Spyce (2006-11-17釋出2.1.3版)
  • Tipfy (2010-06-30有0.5.6版可用) tipfy是一個小而有威力的架構,特別地它是由Google App Engine做的。
  • Tornado (2009-09-10釋出0.1版) 是一個可擴展、非阻塞式的web伺服器的開放原始碼版本,也是推動FriendFeed的工具 (取自Facebook釋出這個專案作為開放原始碼)。
  • WebCore (2010-03-02釋出0.9版) 一個全棧式、輕量型且有效的web開發架構,Web應用程式就跟一個單獨的檔案那樣簡單,或是你所想要的那樣的結構化,利用流行的WSGI組件、ORMs等等、不會讓你鎖住、並且提供一個像是init.d那樣獨立的中介軟體組態。
  • web.py (2010-03-20釋出0.34版) 考量理想的方法來寫一個Web應用程式,編寫程式碼來實現。
  • Webware (2010-04-18釋出1.1beat1) 是一套Python套件跟工具用來開發物件導向、web基礎的應用程式。
  • Werkzeug (2010-04-23釋出0.6.2版) 是一個Unicode的,包括一個強大的除錯器、功能齊全的request跟response物件、處理實體標記的HTTP工具、快取控制表頭、HTTP日期、cookie處理、檔案上傳、強大的URL路由系統跟一堆社群貢獻的額外模組。
  • WHIFF (2010-06-03釋出1.0版) WHIFF 是WSGI/Python web應用程式的支援服務集合,它允許應用程式被”dropping”的動態頁面組合到容器的目錄中,他也自動地包含先進的功能支援像是AJAX、jQueryUI widgets、Flash基本的圖表等等,以及瘋附得文件跟教學文章。
  • XPRESS (1.0 RC3 Released 2009-10-31)是一個用Python寫的開放原始碼的web應用程式架構,它提供了一個有組織的設計跟撰寫一個網站或web應用程式的方法,XPRESS強調安全、速度、簡化、可擴充性。

基本架構

這些專案提供基本的 “應用伺服器”,不是在Apache上就是其他的環境上以自己獨立的程序來執行,在這許多的架構上你可以你自己樣板引擎的選擇跟其他的組件在上面執行,雖然有些架構可能了部份技術堆棧的技術。

  • AppWsgi – 建立你自己的ajax架構以執行在mod_wsgi apache的伺服器上的描述
  • Bobo 是一個輕量級的架構用來建立WSGI web應用程式,它的目標就是容易使用跟記得,它涉及兩個問題: 1) 對應URL到物件以及 2) 呼叫物件來產生HTTP回應,Bobo沒有樣板語言、資料庫整合層或很多由WSGI中介軟體或特定的應用程式函式庫提供的較好的其它的功能,Bobo建構在其它架構上,最著名的有WSGI跟WebOb
  • Bottle 是一種快速和簡單的微架構,為小型網路應用程式所用,它提供有url參數支援的請求派送(路由) 、樣板、鍵/值資料庫、內建HTTP伺服器跟許多第三方WSGI/HTTP-伺服器跟樣板引擎的連接器,所有的功能都在一個檔案裡,沒有跟Python標準函式庫相依的檔案。
  • CherryPy (2010-04-14釋出3.0.4版)是python風格、物件導向的HTTP架構,CherryPy驅動的web應用程式實際上是內嵌在他們自己的多執行緒的web伺服器內的獨立的Python應用程式,TurboGears、web2py (見上面)也使用CherryPy
  • circuits.web (2010-02-01釋出1.2.1版) 是一個基於事件驅動的輕量級跟高效能的HTTP/WSGI架構的組件,cuits.web跟CherryPy(見上述)有相似的功能,像是CherryPy的URL對映,circuits.web應用程式是獨立的應用程式具有高效能、多執行緒的web伺服器跟同時強大的可擴展性以及全功能的WSGI支援跟其它web伺服器的發佈。
  • Python Paste (2010-04-30釋出1.7.3.1版) 帶來Python Web 開發跟Web應用程式安裝的一致性,提供開發者跟系統管理的工具,另外Pylons (見上述)是建構在Paste之上。
  • PyWebLib (1.3.4) – 提供表單跟sessions的支援;用於實作web2ldap
  • WebStack (2007-10-29釋出1.2.7版) – 很輕量級,在功能比較上需要額外的技術層(像是XSLTools及其它)來配合全棧式架構。

提供樣板的基本架構

  • Albatross (2010-03-15釋出1.4版) 一個小且具彈性的Python工具包用來開發高度狀態化的Web應用程式。
  • Aquarium (2007-01-01釋出2.3版) 提供方便的函式庫、跟Cheetah緊密的結合,不同Web環境的連接器
  • Divmod Nevow (2009-11-25釋出0.10.0版) 一個完善的函式庫包括鼓勵應用跟邏輯表示層分離的資源模式、支援設計者友善的XHTML樣板跟純Pyton樣板的標記系統,跟一個強大的AJAX的API (Divmod Athena),這個API以結構化的方法支援高度動態Web網頁的建構。
  • JOTWeb2 (2005-12-30釋出1.10版) 使用HTML跟TAL/TALES/METAL 模板來開發動態Web應用程式
  • Python Servlet Engine (2008/01/19釋出4.0.0beta02) PSE剖析你的樣板到二進位編譯的”servlets”來產生執行快速的Web頁面。
  • Quixote (2007-11-16釋出2.5版) 允許開發者開發動態網站大部分盡可能地使用現有的Python知識
  • repoze.bfg (2010-07-03釋出1.3a4版) 一個小型、快速、扎實的開放原始碼web開發架構,它讓真實世界的web應用程式的開發及佈署更有趣、更能預測以及更具生產力。
  • Spark (2006-9-15釋出0.2.1版) 快速輕量級的Web工具,支援mod_python、WSGI跟Twisted。 (2010-03-15,網站有一週以上沒有回應,看起來是死了)。
  • Spiked (2010-01-23釋出0.1.3版) – 建置在Twisted跟Cheetah之上的web開發架構。
  • Wasp (2007.07釋出2.00版) – 支援命令列、CGI跟內嵌web伺服器模式,具有模板、session機制跟其它模組,強調易用性和熟悉的範例。 (2010-03-15,網站表示它不再更新,”我很抱歉WASP將不再回來,我只是沒有在這個冒險上,來看看我如何向我的碩士學位努力…”)

停用的架構

下面的架構不是停用,他們的開發者已經說明不再維護程式碼,就是看起來已經沒有再開發或維護,在他們的網站上專案已經很久沒有更新。

  • 4Suite (伺服器產品似乎常沒有更新而且網站常常掛掉)
  • Crusader 是一個功能強大的Python應用伺服器基於一個可延伸、可擴展和易於使用的一般用途得伺服器架構。
  • Cymbeline (2005-12-09釋出1.3.1版) 一個應用伺服器架構,包括了像是DB跟任意物件池、Web伺服器、持久化物件庫跟文字控制台等功能。
  • maki (開發者不再使用這個產品)
  • Python Server Pages,或PSP (從1999開始舊的Web站台)
  • Snakelets (2008-10釋出1.50版) 容易使用的Python Web應用程式伺服器,自從1.50版釋出後就沒有繼續了。

書籍跟文章

  • Steve Holden寫了一本關於Python Web Programming的書,這本書來自John Goerzen的Foundations of Python Network Programming有簡體中譯本,也很有用,歐萊禮的Programming Python 3rd Edition(有繁體中譯本)有500頁是在寫關於Internet的程式設計,包括250頁的Web指令碼,最後檢視Wesley Chun的Core Python Programming的Web Programming這一章節 — 也有一些部份在討論Web API。
  • Developing With Mod_Python – 一篇關於Mod_Python programming的文章有Cheetah樣板跟MySQL,包含的程式碼範例。
  • Zope 3 Quick Start Guide 提供了Zope 3簡短介紹。

編輯手記

上面的列表應該可以用字母順序來安排 – 在新的解決方案增加時請反應這一點,在指定釋出日期時請使用格式YYYY-MM-DD。

對那些想要宣傳並貢獻此頁的人來說特別值得一提的是在”重組”內容時:

  • 不要移除編輯者的原則:當人們這樣做時不只表示他們不關心這樣的原則,而且也要讓人相信這一頁從來沒有任何的結構或目標。
  • 假如你必須改變這一頁所用的分類,至少嘗試指派所有的架構到有意義的分類,不要為了提昇某個專案的簡介而另外發明特殊的分類,不要合併分類並且將架構放到雜項分類中。
  • 不要新增連結到專案中,除非他們是Web架構,相反地,使用WebComponentsWebServersTemplating這幾頁,或任何跟WebProgramming相關的頁面。
  • 有些架構不再積極開發或維護,不要沒有事先任何地調查就只是把紀錄移到”停用的架構”這一節裡。

一些基本的編輯建議:再編輯的時候使用預覽按鈕,而不是留下很多小變更在歷史紀錄中。

ㄚ琪的話,這一篇翻了很久,在翻譯期間有更新了不少,目前的截止日期為2010/07/13,如果有更進一步更新,煩請提供訊息,我再補充進來!

Amara XML工具包

星期三, 三月 10th, 2010點閱人數:168次

Amara XML工具包是針對XML處理的Python工具的開放原始碼收集,不只是工具,恰巧是用python編寫的,而且其工具是由底層到使用Python用語跟比其他程式語言有更多的優點的Python所建構。

Amara建構在4Suite上,而4Suite更著重在Python裡的XML標準的字面實施,Amara更增加了Python面對這些能力,Amara是開放原始碼,提供了Apache授權的4Suite變形,見檔案COPYING有更多詳細資料。

Akara是一個新的繖形專案,它包括了4Suite跟Amara 2.0做了全面的改善,見AkaraAmara2更多資訊, 我們強烈建議Amara使用這開始轉向Amara2

針對缺乏耐心的:快速安裝

Amara需要Python 2.4或之後的版本以及4Suite-XML 1.0rc4或之後的版本,它支援setuptools,所以你可以就這樣照下面的做:

easy_install amara

假如這沒有作用,你可能不能用easy_install來設定,那我建議你照這些簡單的操作來做。

easy_install會自動地幫你注意安裝的相依性,假如你不喜歡用easy_install,那就抓一個版本比1.0rc4新的Suite-XML套件來裝,然後使用一般方式來安裝Amara套件:

python setup.py install

或使用Windows安裝器,或其他的。

更多細節

Amara提供了你可以相信符合XML標準又不會失去熟悉Python感覺的工具,目前穩定的版本是1.0,開發版本是1.1.9,開發本有很多的效能跟API的改善,但是它不像穩定版那要有實地的測試,Amara最著名的組成部分是Bindery。

Amara Bindery: XML跟py一樣容易

Bindery將XML文件轉成Python物件樹對應使用在XML文件的詞彙,非常的清晰,例如,文件

<monty>
  <python spam="eggs">What do you mean "bleh"</python>
  <python ministry="abuse">But I was looking for argument</python>
</monty>

會變成一個資料結構所以你可以這樣寫:

binding.monty.python.spam

為了取得”eggs”值 (就像Python Unicode物件)或

binding.monty.python[1]

為了取得內容”But I was looking for argument”的元素物件,會有其它像這樣的Python工具,並且使得Bindery獨特之處就是針對繫結XML藉由一個很陳述規則基礎的系統驅動到Python的資料,你可以註冊那些由XPattern表現專門繫結的行為觸發的規則,它包括XPath支援而且很有效率,使用SAX來產生繫結,見使用者文件有更多細節。

使用者注意

開發者注意

Free Articles Input

星期二, 一月 12th, 2010點閱人數:5次

Last year I wrote a chinese article “各搜尋引擎的登錄網站” about search engines how to crawl our sites. They use a human-edited directory of the Web.  And the article “關於PageRank” introduces PageRank, Alexarank, BrowseRank and TrustRank. PageRank is a link analysis algorithm. It help us to know the page’s popularity. We need to write unique articles to improve pagerank. So if we have links to our sites on another sites, we can have a good rank. It is a good SEO tactic.

But how do we have links on another sites? I suggest you can input your articles on Article Input.

Recently, I study Python and I found How to create a basic program in Python is good for me. Many people come from a Linux/UNIX background may be familiar with a command line. But like me from a Windows background to use the Python interpreter is no problem. In a script, main is our controlling-and only-function. Ha! Ha! It is like C and Java. I noticed sys.argv, sys.stdin, sys.stdout are different from other languages. And we can understand the fileinput module provides support for processing lines of input from one or more files.

It is a good getting started article and can helps us to learn Python. And the site is similar to my Job Da Ren ‘s WordPress Related Posts Plugin. Like this article have some related articles as follow:

1. How to make Python script execution in UNIX and Mac OS X and in Windows
2. The difference between scripts on Windows scripts on UNIX
3. Python applications are distributed as source files
4. How to use the Python file system
5. Client complaints about inconsistent query results

We can use these free articles to help us to improve our programming skills. But I think the site is new, so I can not find how to submit an article. May be something wrong. And there are not many artilce on the site. So we will spare some time  to wait.

Eclipse for Python, Jython and Iron Python development

星期三, 九月 16th, 2009點閱人數:326次

時代在快速的進步,就連很新的Google應用服務引擎開發實戰所介紹的工具,也變得有點舊了,就到我用Eclipse還會出錯無法使用,變舊的地方在2-4-1 使用Eclipse,這節介紹用PyDev這個外掛,來讓我們在Eclipse下寫Python程式,書本中所介紹的Eclipse應該是舊版的,我現在則是使用Version: 3.5.0的,從p.38開始圖面一直就不同了,我把圖面更新如下,讓各位參考:

繼續閱讀 »

驗證Python 專用的 Google 應用服務引擎 SDK

星期三, 九月 16th, 2009點閱人數:130次

在課本Google應用服務引擎開發實戰裡頭2-3-4 驗證SDK安裝這一節指出,Step04,在應用程式的資料夾下,利用dev_appserver.py指令來啟動開發應用伺服器,如果你注意看畫面,就得注意要下dev_appserver.py .
這要的命令才對,另外根據Google的說明文件:dev_appserver.py,你可以到該應用程式的資料夾的上一層目錄,執行這樣的命令:
dev_appserver.py myapp
這樣也可以喔!