Skip to main content

· 5 min read

當開始使用 MVC (Model, View, Controller) 的方式設計網站程式後,組織網站架構的重任就從傳統的分頁換到程式控制部份 (Controller) 的網址 - 函式對映 (URL Mapper) 上.

舉 python 網頁框架的例子為例,python 的網頁框架很多,最常聽到的 Django, TurboGears, pylons 都各自有各自不同的網址 - 函式對映方式. 網址 - 函式對映能將程式控制部份對映到網站架構,也能依照一些規則將輸入的網址對應成函式的參數,方便程式使用.

Colubrid 這個 WSGI 工具的網站上清楚地列出了目前常見的 URL 對映分類:

  • 使用 正則表達式 (Regular Expression, Regex) 對映 -Django
  • 使用 物件 (Object) 對映 -TurboGears
  • 使用 路徑 (Routes) 對映 -pylons

"-" 號後面的補註是我另加上去的,表示這幾個框架預設的 URL 對映方式. 當然有的框架也可以用另外的 URL 對映 (例如 TurboGears 也能使用路徑對應方式).

範例

首先我們先給出一個基本的程式架構,再來討論如何將這個程式對應到網頁上。本文隱藏了各網頁框架特定的程式碼,因此在實際運行各種對應方式時需要再加上各自的程式碼.

Class Root(object):
def index(self):
return "Front Page"
def profile(self):
return "Profile Page"

app = Root()

這個類別 (Class) 包含兩個函式 (Method), 我們的目的是讓它顯示成如下的網站架構:

/
- index
- profile

例子很淺顯,我們就開始來嘗試吧

1. 使用 正則表達式 (Regular Expression) 對映

使用時在 Root 類別裡加上正則表達式來對映網頁

urls = [
(r'^index,'index'),
(r'^profile,'profile')
]

網頁架構是一串以 (r' 網頁名稱 ' ,' 函式名稱 ') 組成的列表來定義. 網頁名稱,函式名稱部份都可以使用正則表達式

2. 使用 物件對映

不必加入特別的對映方式. Root 類別在實例化後等同網站預設的根目錄, Root 類別下的兩個函式直接對映到相應名稱的網頁上.

/- Root
- index()
- profile()

訪問 / 或 /index 時就等於訪問 index () 函式, 訪問 /profile 時就等於訪問 profile () 函式

3. 使用 路徑對映

這種方式是跟 Ruby on Rails 學來的. 方法是另外建立一個類別,專門處理網頁架構.

class app(RoutesApplication):
mapping = [
('/', Root.index),
('/profile', Root.profile)
]

app = app()

網頁架構是以 (' 網頁名稱 ' ,' 類別。函式名稱 ') 組成的列表來定義. 網頁名稱部份可以使用正則表達式.

結語

我在寫本篇之前,從來沒有看懂其他網頁框架的對應方式,因此傻瓜式的物件對映方式對我來說是最直覺了,使用至今還沒什麼感到不方便的地方.

雖然本篇所作的比較簡單,無法展現各種對映方式的實際能力, 例如本篇沒有比較到輸入參數的對映方式.

以上三種方法都已經被證明有效而且許多網站正使用著這些方法運行著. 希望大家能以本篇為基礎,就較理解的 URL 對映方式繼續深入學習.

我很想知道各位看官,對於用簡單的例子來對的各種 URL 對映方式做說明是不是比較容易理解呢?

· One min read

CEATEC JAPAN 2006 上東京大學的 Ezaki San 的研究室 (養海龜 的那間) 又推出了 Dual Stack Mobile IPv6 展示,可以應用在一般 IPv4 環境中. 前陣子看 Draft 時覺得這個方法很棒但是實做也很複雜,想不到這麼快就有實做展示出現了.

看展示平台的樣子是拿筆電當作 Home Agent, 拿 Sharp Zaurus 分別當作 IPv4 與 IPv6 環境下的 Mobile Node, 讓兩者可以順暢使用 IPv6 做溝通.

圖片連結自 http://www.ipv6style.jp/jp/20061018/ceatec3.html

· 3 min read

根據這封信件所言,IETF 上 又將出現一個新的 Working Group. 這篇是他們的 Design team 在 NEMO WG 上的宣告.

這個 WG 的起因來自於 Edouard LASNIER REDDAN 一封雷諾車廠研發 MIPv6 Car 成果的信件. 信中說明在大環境使用 IPv4 的環境下在車輛中使用 MIPv6 的車子已經被開發出來了 (用的可能就是 Mobile Router), 需要解決的問題除了透過轉換透通機制在純 IPv4 網域取得 HA address 外,還有就是從車廠的角度看,HA 不能被通信商把持的問題.

MIPv6 addressing v4 traversal 看起來很值得研究, 而 HA 不能被通信商把持的問題感覺似乎在未來可以用來加持我的 NEMO-DHA 架構。可惜跟現在我的論文主題方向還是有些差別....

為了更容易了解這封信的價值.. 我把雷諾車廠信內提到的主題內容也整理成了投影片大綱了附在前一篇

MIPv6 & traversal/Tunnel 應該將會是蠻熱的題材吧,要求的背景知識也很高, 可惜是實驗室目前要做這題材的話也等於找人重新開始學了, 從讀 traversal/Tunnel mechanism, 想 idea, 到準備模擬工具, 跟其他 lab 比起來已經沒什麼優勢了...... 殘念

我想也大概不會有人想做 (碩士班做的話從頭學再用功大概 2 年內對這主題也不可能做出好東西,除非請博班帶著大家分著做), 只是講講有這東西而已.

要我繼續留下來是辦不到的,可惜了這麼棒的東西卻不能自己做....

· One min read

After watching Mark Ramm's TurboGears One Page Reference,

I made a huge MindMap to track my understanding of TurboGears svn version, I think this MindMap will help others as well.

Here are parts of them (that I've tracked):

and related Cherrypy API

Notice that a part of notes in these MindMaps are based on Mark Ramm's One Page Reference.

And it's even better if someone intrest to make a more fancy quickreference based on those early works.

· 2 min read

有兩種設計軟體的方式,一種設計方式是將軟體設計得很簡單,因此很明顯地沒有缺點; 另一種設計方式是將軟體設計得很複雜,因此看不出明顯的缺點. ——C.A.R. Hoare

今天到書局買了本簡體的程序員雜誌,裡面提到了很有趣的 "巫毒編程 (voodoo programming)" 方法.

"巫毒編程 (voodoo programming)" 說的是一種很糟糕的寫程式方法.

感覺 "巫毒編程" 的形容實在是蠻形象的,想想當寫程式時要是遇到程式一直跑不出來又找不到原因,心情超煩悶的時候打鍵盤是不是就痛苦地像在刻咒怨一樣?

如果這時試著像對草人扎針一樣隨意改些程式的變數,按下編譯 (Compile) 然後期望程式可以正常跑 (詛咒成功). 嘿嘿嘿,是不是很有巫毒儀式的感覺呢?

update from April/16/2006