Skip to main content

· 5 min read

好久前使用 Ultra Dev (Dreamweaver 4 網頁編輯器時代的東西) 寫 ASP 網頁時,那時其中一個超方便的功能就是在與伺服器繫結後,選擇一個 "產生詳細頁面" 的 Widget 元件,稍稍做點設定 Dreamweaver 就幫我產生一個包含資料庫表單內容的頁面。用同樣類似的方法就能完成製作新增,刪除網頁等事情。製作一套動態網頁也不用花太久時間.

上禮拜回頭去試試 Ruby On Rails 時覺得 ROR 有得分的一大優點是鷹架產生器 (scaffold).

scaffold 有什麼功能呢?scaffold 可以根據 RoR 的 ORM (Active Record) 來產生對應的 Controller/Template 程式碼,達到能基本的資料建立 / 修改 / 檢視 / 刪除 (Create/Read/Update/Delete, CRUD) 的目的。而且即使在產生出來 scaffold 後再變更資料庫欄位,產生出來的程式仍然可以正確判斷內容。使用感覺頗類似 Django 的 admin 介面或 TurboGears 的 Catwalk / DataController, 但是就可修改性而言我覺得這種作法稍勝一籌.

只是要拿 ROR 的 scaffold 繼續修改也很容易碰上問題. 因為它為了要能自動對應資料庫的改變來反應到 scaffold 介面上,所以產生出來的 code 除了基本大框架可見之外,裡面的內容都被包在不可見的單一函式裡. 要做任何修改時還是得自己大量改寫 scaffold 產生的內容 (不過還是比全自己寫來的快)

要搭一個漂亮的鷹架要多久呢? 我使用 TurboGears 來重現 scaffold 的各種列表增刪修改介面,為了取得最高的重用性,再用 widgets 改寫一遍,運用 TurboGears 現成的 Widget 已經能幫忙處理新增 / 修改表單的生成。弄好這個 CRUD 介面已花了 3 小時,而且還不像 Rails 一樣會自動去抓變動的欄位.

(3 小時?有人開始撇嘴了....)

寫這個介面當然是有目的的. 接下來在開發環境中,我試著將這個 CRUD 介面做成了 TurboGears 的樣板。並透過 tg-admin 加入一個 crud 命令。使用

tg-admin crud [model class name][controller name]

這樣的語法來產生一個包含了 controller 和 template 的資料夾

例如 model 中已經定義了一個 BookMark class, 只要在專案資料夾中輸入

$tg-admin crud BookMark admin

就會在專案資料夾中新增一個 admin 資料夾,在 controller 中使用

from admin import admin 就可以將處理 BookMark 資料的介面導入到網站中.

以後每次要做的只是簡單地修改表單欄位 (Form field) 定義和 list/show 樣板想要顯示的欄位就可以有完整的 CRUD 介面了。整個過程只要幾分鐘 (預設還會自動套用專案預設的 CSS, 啥都不改就蠻漂亮滴 XD).

目前 tg-admin crud 的做法和 ROR 的 Scaffold 最大的不同在於整份產生的介面不管是 controller 或 template 的程式都是明確的,沒有需要修改時就得重寫的黑盒子.

接下來應該是進一步降低要修改的地方,透過 widget 來將重複設定 (無論是 controller/template) 都減到最低程度。達到足夠成熟度再公開.

目前的 crud 樣板在這,已經可以運用了 CRUD Template

· 2 min read

WhatWhat Status is a web application for tracking the status of projects across an organization. It's opensource and able to download from here.

I found this project from the TurboGears book. WhatWhatStatus' default setting is for protegres and MySQL, but not for SQLite. I'd like to share my steps to use SQLite database with WhatWhat Status.

1. check out the source from svn

svn co http://cleverdevil.org/svn/optio/whatwhat/trunk

2. install textile with easy_install command

$ easy_install textile

3. config the dev.cfg file to use sqlite database

enter the whatwhat status folder, edit dev.cfg:

[global]

# WHATWHAT SPECIFIC

whatwhat.uploaddir = '%(current_dir_uri)s/whatwhat/static/files'

# DATABASE

sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite"

4. create database by tg-admin sql sql command

$ tg-admin sql sql (or tg-admin sql create)

5. add default user with catwalk

5.1 first you need to start the TurboGears toolbox

$ tg-admin toolbox

5.2. choose the catwalk in browser

5.3 select "Person" in catwalk left side menu

5.4 click "Add Person" button on top of the page

5.5 enter the following informations:

displayname: any name
email: any email
userid: admin
password:21232f297a57a5a743894a0e4a801fc3

Note that the password field is crypted, the verbose password we typed means "admin".

6. Start whatwhat status

run

$ whatwhat-start.py

enter the username/password as "admin", "admin", then click login.

all done!

· 2 min read

快下班的時候接到一通電話,聲音甜美的天瓏小姐打來提醒我上次訂的 TurboGears 書已經到貨囉. 晚上馬上殺到天瓏去敗了一本,在附近的漢堡王就看了起來.

總的來說感覺很不賴,和網路上的教學文章切入的方向不盡相同,書中採用了好幾種方法來寫 Hello World, 好讓程式 / 網頁開發者都能找到切入點.

比較令我驚訝的是在書中第四章就開始講使用版本控制來管理程式,並講解 TurboGears 對測試先行(先寫測試再開始開發的方法)的支援;書中有大概 80 多頁 (全書 450 頁左右) 講的是 AJAX 函式庫 (Mochikit) 的支援,這都是網站教學文章裡最缺乏的.

另外一個插曲是我在天瓏附近的簡體書店裡看到 DH 的 Agile Ruby on Rails 簡體中文版,定價 65 元 (4), 跟手上的這本 $50 元 (30) 比起來實在夠便宜呀 Orz