30 5月 2011

[文件] Django 框架大冒險之一:什麼是框架?

=序=
許是我個人資質駑頓,網路上許多關於 Django 這套網頁框架的「教學」都讓我不由自主地在研讀的時候呈現兩眼發楞,腦波平直的植物狀態…其實心裡有好多問題想問,但是這些文件裡都沒有寫。偏偏其他的網友們又討論得非常熱烈,這場景就像小時候因為某些緣故一直轉學,每次到了新的班級裡,同學之間彼此提到時會哈哈大笑的那些梗,我一個都沒聽過…等我想通的時候…恐龍已經絕種了…[]

我很不喜歡某種知識被某些「高級知識份子」把持的想法。如果說,一旦變成高級知識份子,就沒辦法講普通人都聽得懂的話,那麼請讓我繼續做一個低級的知識份子,盡自己的力量,扮演一下偷天火給人類的普羅米修斯吧。[吐]

在開始進入正文以前,最後要說明的是,這系列的 blog 想做的是 Django 框架的心得分享,而不是 Python 的教學文章。我一直想把這類感覺好像很硬的技術用寫小說的方式進行。如果您對技術沒興趣,還是可以用讀小說的心情讀下去,但如果您就是來學技術的,那我「假設」您應已經有基本的 Python 經驗。像是會安裝 Python 啦~會打開 IDLE 隨便寫個幾行程式打發時間。至於 Django 的安裝,就請您移駕到其他網友的教學文裡研究一下吧。另外,我傾向將大部份的專有名詞以中英文並陳的方式行文。一方面是我覺得翻譯出來的中文是很少見的字眼。正因為少見,所以即使是全部寫中文,看起來就像在讀左傳或是春秋這種古文一樣對失眠症頗具療效。


=正文=
Python 裡,最小的單位是一個 statement (陳述)。用法很簡單,一行就寫完了:
print "I like to move it move it!"

再高一點點的是 function (函式)。可以把它視為幾個 statement (陳述) 的結合:
def move(who):
    print who + " like to move it move it!"
這麼一來 move 這個 function (函式) 就可以重覆利用了。例如,只要給它 move(you) 就會得到:
move(You)
You like to move it move it!
給它 move(We) 就會得到:
move(We)
We like to move it move it!

如果有好幾個 function (函式) 都和某個主題有關,那還可以把這個主題設定成一個 class (類別),就像:
class Dancer():
    def move(who):
        print who + " like to move it move it!"
    def shake(what):
        print "Shake your " + what
這麼一來, Dancer 這個 class (類別) 就可以帶動氣氛地說某某人 (who) like to move it move it. 而且也可以叫大家搖擺你的 (what) 了!

接下來,還可以把上面這個 class (類別) 存成一個叫 spin.py 的檔案 ("spin" 是我隨便取的。本來想取吉米漢醉克斯,但是一是太長了,二是我不會拼 [主因]…) 這時候,這個檔案就變成了一個 module (模組)。可以在下次有需要的時候,利用 Python 的 import 這條 statement (陳述) 直接引用。如此一來,就不需要再重寫一遍了。

要再比class (類別) 高一點點的話呢…大概就是在目錄下加上一個 __init__.py 的空檔案,這麼一來這整個目錄就能被視為是一個 package (套件) 來使用了。package (套件) 的用法,大概也不脫 import (引入) 或是安裝…等等的用法。

以上,是我自學 Python 的過程中,對 Python 這套語言架構上的理解。然後…我就盯著各篇 Django 的教學文章裡寫的「Django 是一種搭配 Python 的高級框架…」、「Django 網頁開發框架」、「Django 之於 Python 做為一種框架,就像 Rails 之於 Ruby 一樣…」

什麼鬼?有高級框架,那有沒有低級一點的?誰能說明一下這六個字「網頁開發框架」是什麼意思?和「白種人開發大西部」是一樣的讀法嗎?最後那位…我現在不懂 Django 是什麼,你卻叫我先去搞懂 Rails 和 Ruby 的關係?!那要是 Rails 的文章也寫成「Rails 之於Ruby 做為一種框架,就如同 Django 之於 Python 一樣…」的時候,那我豈不是中和永和鬼打牆?

就 framework (框架) 這個字眼,就讓我目瞪口呆像個廉價充氣娃娃一樣坐在電腦螢幕前反省我是不是腦袋裝洞…三個禮拜後,我想通了!

原來 framework 指的是 Django 這個套件會自己把某幾個目錄下的東西視為網頁應用程式,再把另外某幾個目錄下的東西視為網頁內容的元素,另外還有某幾個檔案會被視為是網站的設定。雖然這裡所謂的「某幾個…」都是可以讓使用者再自行設定的,但因為 Django 一開始就提供了一些預設的目錄,所以只要照著做,就可以了。

這感覺就像小小孩玩的著色本。只要把每個格子都用不同顏色的彩色筆填滿,哇~一個臉色發青的米老鼠就出現了!(彩色筆買到黑心貨,除了黑色那支不黑以外,其他都是黑的。)

著色本上的線條,可以視為是一種框架,而 Django 也可以視為是某種線條,只要利用 Python 語法當做彩色筆把該填的地方上色,嗒啦~一個看似專業的網站就出現了!

{{未完,待續…}}

[吐草]:沒有讀西洋文學概論的,又不一定知道普羅米修斯是誰。你自己才剛挖了一個坑說不喜歡知識被把持,就馬上跳下去?不過話說回來,就算讀了西洋文學概論,也不一定真的就知道普羅米修斯是誰啊?現在年輕一輩的大概會覺得偷天火的不是科博文,就是波西傑克森吧?!這個念頭轉來轉去,我的坑也愈挖愈深了…

4 則留言:

  1. 哈哈,這篇文章還真說中了我的心聲啊... 期待這個系列的文章~

    回覆刪除
  2. +1, 寫得真好,終於比較清楚Python & Django 了

    回覆刪除
  3. 你的文章真的都很有趣,文筆也很好,讓閱讀的人不自禁的會心一笑。

    回覆刪除
  4. 哈哈,大大文筆幽默啊
    看了不禁會心一笑

    回覆刪除