Skip to main content

56 posts tagged with "TurboGears"

View All Tags

· 2 min read

2006/30/7 Since may people may come from 42, I suggest you to download the full instruction at TurboGears Trac, you'll see full instruction to make it.

This article is motivate by the framework comparison screencast performed by Sean Kelly. I found this screencast from TurboGears group. the screencast compare J2EE , Rails ,Zope ,TurboGears ,and Django. TurboGears did fairly well. but Sean Kelly wasn't using the latest version(~0.9) during his tests.Thus I try to re-imlement the demo by using bunch of exciting new features (Model Designer, CatWalk, DataController...) introduced in the latest TurboGears version.

Origin version in ScreenCast

The screencast implement page like this, there is a add only interface, no editing.

And it cost 2 python source files 49 lines of code, 2 page of templates, 53 lines of code, not a hundred lines of code.

Re-Implement version with latest svn(#885)

Its time catch up with Sean Kelly's demo in latest TurboGears version. The re-implement with latest Turbogears svn like this. TurboGears > 0.9 provide autogenerate Editor(Catwalk) in Admin Panel(Toolbox)

We can get another running mode editor(much usefull for real app) with DataController by several lines of code.

the re-implement version cost 2 python source files (now Turbogears config file is in python) 6 lines of code, 0 page of templates, not a ten lines of code. The re-implement version also include a full-functional database-relation editor.

Turbogears automatically generate pages for you both in admin and practice perspective. In Turbogears you can customize DataController and other widgets' looking and feel to fit your layout style.

· One min read

根據 Sean Kelly 的 framework comparison screencast 的影片演示, 他比較了 J2EE, Rails, Zope, TurboGears, and Django 幾個框架. TurboGears 在其中得到了不錯的評價,然而他所使用的 TurboGears 版本還沒引入網頁自動生成資料庫編輯介面 (CRUD) 等 0.9 版新加入,可以大大減少初期開發時間的功能. 因此我利用他的 Time Tracker 例子和資料模型寫了篇用上 TurboGears 0.9 新功能的教學文章 (英文), 貼在 TurboGears Trac 裡,可以前去下載.

QuickPrototyping: Making a Time Tracker in TurboGears http://trac.turbogears.org/turbogears/wiki/QuickPrototyping

· 2 min read

在 TurboGears 中可以用 "@validate ()" 裝飾方法來處理輸入表單參數的轉值與驗證。使用的好處是除了會自動確認型態的正確性之外,還會將字串轉換成目標型態.

例如拿前一個網頁加法器作例子,原來例子中加總結果必須先將字串轉換成目標型態,因此計算式如下 SUM = (int (A)+int (B)) 我們可以使用 "@validate ()" 來預先先確認輸入資料,並將資料轉換成預期的資料型態. 範例如下:

from turbogears.validators import *
@expose(inputform ="add")
@validate(validators=dict(A=validators.Int(),B=validators.Int()))
def calcit(self,A=0,B=0, SUM=0):
template = """
<form name="add" method="post" action="/calcit">
<input name="A" type="text" value="%d"/> + <input name="B" type="text" value="%d"/>
<input type="submit" value="=" /> <input name="SUM" type="text" value="%d"/>
</form>
"""
SUM = A + B
return template%(A,B,SUM)

@validate(validators=dict(A=Int(),B=Int())) @validate(validators={"A":Int()}, "B":Int())

現在例子中由於已經預先將字串轉換成目標型態,因此可以直接加總 SUM = A + B

這讓程式碼可讀性更進一步增加了.

總結

validate ()" 方法除了可以幫忙我們判斷回傳值型態外,同時也會將回傳值從傳回的字串型態轉換成指定型態供我們處理

除了這些簡單值的字串轉換外,在 TurboGears 中做 email 地址確認時,甚至還能選擇確認 email 主機是否真正存在喔;)

· 4 min read

TurboGears 中可以使用從模板生成網頁 (Templating) 的方式,可以更好地將控制邏輯與操作介面分開,來達到程式碼與網頁分離的需求。讓程式與網頁更易於維護.

使用 TurboGears 中的預設模板,可以用所見即所得 (WYSIWYG) 網頁編輯器來編輯網頁外觀. 並在回傳時用字典 (dict) 形式傳回變數,降低程式碼與網頁之間的直接關聯性.

讓我們用模板功能取代將網頁用字串存在 controllers 中的方式:

1. 建立控制邏輯 (Add Logic)

0 from turbogears import controllers
1 from turbogears import expose
2 class Root(controllers.RootController):
3 @expose(template=".templates.filename")
4 def webpage(self):
5 return dict()

透過在 @expose () 方法中加入 template=".templates.filename" 宣告來指定要使用的模板名稱.

return 型態必須是字典型態。裡面傳回的內容則可以動態被填入模板中

2. 建立模板

我們建立 "filename.kid" 的模板. 模板名稱要跟 controllers 中 @expose (template=".templates.filename") 的 filename 相符

3. 模板宣告

模板要使用 XHTML 格式來撰寫.

從 HTML 轉換到 XHTML 的主要差別在於 XHTML 對網頁語法有較嚴格規定

  • 在 html 標籤內加上 <html xmlns:py="http://purl.org/kid/ns#"/> 宣告,表示這是一個 TurboGears 的模板,在執行的時候 TurboGears 才能正確地將自行設定的變數替換成適當的值

  • 所有的標籤要對稱,單一的標籤要以 / 作結尾。例如 <br> 變成 <br/>, <input> 變成 <input/>

結論

前幾分鐘裡的範例都是在 Controller 中將網頁用一個 "template" 字串來表示,直接將網頁內容存在 python 程式裡。然後用傳回值 (return) 的方式將 "template" 字串轉換成網頁顯示出來. 用這種方法寫網頁程式,好處是我們只需要將網頁程式當作一般程式來處理就行了,不需要了解太多複雜的動態網頁技巧,利用這樣的方法,我們需要仔細處理插入變數的類別,並在回傳時注意變數的安排順序,好正確地將字串中的變數替換成我們期望的樣子. 我們很快地就發現這樣將網頁內容嵌在程式碼裡的寫作方式,隨著漸漸增加的功能方法,與要求更複雜的內容呈現時,程式碼就變得越來越難以維護.

我們應該要擁有方便的工具,可以用任意順序傳回我們想要顯示的內容,並在實際的網頁上重複運用這些資訊。最好還可以用一般的所見即所得 (WYSIWYG) 網頁編輯器來編輯網頁外觀,

· One min read

Selenium is a test tool for web applications. Selenium tests run directly in a browser, just as real users do

Selenium 是網頁程式測試工具,可以跨平台跨瀏覽器模擬各種使用者可能的操作. 主要的兩個功能是:

  • 瀏覽器相容性測試 (Browser compatability testing)
  • 系統功能測試 (System functional testing)

Selenium 在內頁框 (iframe) 中,使用 JavaScript 自動化引擎來模擬使用者操作網頁的動作, 可以安裝 IDE (firefox 插件) 來使用 selenium, 或是在 TurboGears 中也可以使用 Selenium , 看看 Selenium4TurboGears 的介紹影片吧