Django 與 Rails 網頁開發框架區別

以下簡單分享我在過去幾個星期,跳脫熟悉的Django框架來學習Ruby on Rails (以下都簡稱 ror )框架的簡短心得。若有錯誤,歡迎請在地下留言更正我的錯誤。

wp-1469522750218.jpg

由於合作上的需要我開始接觸ror。 一直以來都是使用Django在網頁開發上,一路上接觸不少網頁開發工程師/新手網頁工程師都使用或學習ror作為網頁開發框架。對於ror 我的了解一直是:開發十分迅速、很多bug與它強大的社群資源。當然據說ruby語言也不好上手(跟Python比較的話就猶如中文文學史上的文言文—Ruby 與 白話文—Python 差不多吧 ?)。

框架差異

以上是我如何開始接觸ror與接觸前對於ror的看法。接著講講兩者框架的差異吧

動態網頁任務 ROR(MVC) Django(MTV)
資料庫互動存取 Models,  在對應的app models 上建立class物件 Models, 每個app中的models.py建立class 物件
網頁架構與模式 View, app的對應文件夾中存放html.erb 檔案 Template, 建立一個template 文件夾中統一存取
控制與整合 Controller, 每個app有自己的controller來決定操作模型、取出資料 View, 與ROR的controller相似,兩者都是定義一個函數的方式來回覆使用者的請求(request)

細節上兩者架構的差異可以參考:https://bernardopires.com/2014/03/rails-vs-django-an-in-depth-technical-comparison/

對於沒有接觸過網頁框架的人來說,看以上的表格可能會奇怪為什麼會有app呢?

其實兩個框架都能將一個專案的各種功能分裝成一個一個app(以facebook為例就是news feed的頁面是一個app、使用者與使用者之間聊天的頁面是另一個app )來工作。一來讓網頁在未來變得容易擴張同時任何一個功能出現錯誤並不會拖累整個網頁平台的運作。

回到表格上我們可以看出其實兩者的架構幾乎一樣啊。

那麼從運行效率上兩者誰比較優越呢?使用上我個人沒有留意到效能的差異,但以前讀過的一篇研究顯示Django略勝ror一點點,但兩者與其他框架排名都是歸類在較慢的等級。雖然排名較後但是根據我以往Django的觀察,靜態網頁的以現在的記憶體和雲服務提供的CPU依然是能輕易勝任。

開發過程上的差異

如果今天你是任何一個框架的開發者,想要轉換框架環境在開發步驟上需要注意什麼呢?

Django -> ROR:

一般上在django建議一個新的專案時,django不會幫你建立一個完整的MTV架構出來( 我使用的版本不會)。Template, Models都要從新自己寫。每添加一個新的app都需要自己手動更新settings中的apps清單。使用ROR建立一個新的project時,很多基本的內容都幫你安裝好,我在使用時連sass的preprocessor 功能都已經預設好了。而且controller、models中含有很多被註解掉的範例可以參考。

rails_precomment.png
不是人人都有超強的記憶,這些作為提醒的註解非常的貼心

我個人覺得學習上可以直接套用Django的觀念來學習整個ror框架的用法可以加快你學習的速度。因為兩者無論是進階模板使用( ror: yield, django : block/endblock ) 都十分相似。只要django有的功能在ror上一定不會少。

另外一個特點是ror 有強大的app涵蓋了各種前端框架(bootstrap、 skeleton…其他自己谷歌看看)與各種普遍使用的css  library(compass, bourbon…) 或是連fontawesome也能以app方式安裝使用。

ROR -> Django:

有鑑於我一開始先接觸了django才到ror,因此這部分我就稍微講解,無法詳細申論。

從我的觀察與個人經驗上看,從ror轉django需要做好一直寫一直為設置更新的動作。Django稍微比ror好的是當開發者在創立專案時,django 框架會有現成的後端dashboard, 使用superuser帳戶登入(當然需要自己創建一個)就能直接清楚簡易的的更改數據庫中有任何的資料

admin_page
預設的admin介面,提供開發者迅速的視覺化數據庫的內容(在上線前如果沒有使用記得一定要將它從urls.py移除掉或是更改urls的地址)

關於這個功能我相信ror應該有gem apps 可以做到相同的功能,但至少它不是預設的?

總結:

以上就是我碰了 ror 以後簡短的心得分享。如果你有什麼贊同或是想法歡迎在底下留言。

穿梭兩地的貓

“哎唷,怎麼又有小貓了?”

 

父親嚴肅的語氣將我視線轉移到窗外的小花園裡。擔憂小貓被父親親自處理掉,我

掙脫沙發與手機的魅力往窗外一看,花園裡一隻白紋褐色的貓躺在草地上,我們隔著一

片玻璃彷彿看見有人在窺視它。它轉頭看向一群被棕、黑、白塗鴉成各式各樣的小貓與

一隻黑色條紋的灰貓正在嬉戲。

 

“爸,我來處理它們吧。我保證不會被媽看到的”,話剛落音,第一股念頭湧上的是

“真巧”

 

自小我家就是一個貓的磁鐵,父母都將廚餘丟到花園的土壤上做堆肥,而媽媽特愛

吃魚的關係,這股鮮味吸引不少各色的貓都來認我家為自己的領土。每天定時來到我家

外飽餐一頓。 記憶最深刻的就是一隻棕色黏人的貓伴隨我渡過了6 年的中學生涯。 由

於家中兄弟姐妹都到海外留學再加上父母工作忙碌,這只貓自然成了我的生活玩伴。正

巧,她以前的老伴也是只黑灰相夾的貓。不幸,它們在我家附近遭遇車禍,縱然有九條

命也敵不過死神的召喚,雙雙先後去世了,屍體就埋葬在小花園裡。

這些意外到訪的小訪客打開我過往的記憶櫥窗,展示的不僅僅是認流浪貓為玩伴還

的日子有那些年在曜日下到處奔跑為華校籌錢、義不容辭的犧牲休息時刻準備比賽、穿

著潔白的校服在校園內耍鬧、恨不得趕快脫離父母的約束,像哥哥和姐姐能到新加坡國

立大學升學。

 

最終我的高三的成績表現不夠優秀,於是四處尋找老師教授寫推薦信希望能彌補

成績上的劣勢,然而一切努力還是徒然。唯有接受被接受的交通大學入取,帶著一絲遺

憾的打開郵寄到我家的通知書信 。媽見我失望的表情,對我說起了外婆以前老掛在嘴邊

說我是家中最不需要擔憂的孩子,且在最後補上一句“你就努力的去台灣讀書,換算學

費匯率媽還是負擔得起的”。

 

就是這一句話,我決定到一個離家三千公里的國度去留學。早晨,坐在副座的我,

從望後鏡看著漸遠的黑色鐵門,隔壁鄰居在屋外漫步,一種惋惜卻不傷感的景色。內心

中的我相信四年很快就過去。

 

來到了國立交通大學,我所在的校區校狗比較受歡迎,吸引了一群流浪狗來這裡定

居,因此貓聞見狗的存在都躲得遠遠的。唯一一次在宿舍的凳子下看見一隻白黑斑紋的

貓。它眼神謹慎、對於周遭事物有戒心大概也是在確認沒有天敵的蹤影吧。我對它喵了

數聲以顯友好,它見我無威脅,傲慢的掉頭鑽到籬笆間隙中離去。 自此再也沒在校園內

看到貓的蹤影。

 

來到這個新環境裡,猶如貓被丟到狗社群裡的感覺:格格不入。除了人生觀和台灣

年輕人有所差異以外,以往生活中不曾出現的問題都因為離開了父母的遮蔭棚浮出水面。

例如管理個人財務、添購生活用品、確保自己攝取均衡的飲食、 少了一個人一直叮嚀我

喝水,這些以前忙碌的父母都幫我打理的事 現在必須由我自己解決。 打開臉書看到的

是一樣是來台灣留學的朋友在臉書上炫耀在台灣親戚送上的各種生活用品,無助與徬徨

擾亂我規律的心緒。

 

時間飛逝,大一的第一學期在交大獨有的微積分大會考結束畫下了句點。隔天,室

友也一早收拾包袱回家與家人團聚。四人房裡只剩我一人,於是趁著沒有課業、社團煩

惱的日子,到了台北住一晚好好思考明年是否要轉校一事。

 

在台北車站下車時,人生地不熟,於是開著十一號公車開始一連串規劃好的行程。

太遠的地方則靠捷運穿行城市,一種熟悉又陌生的感覺萌現。捷運站與捷運的內部的設

計與新加坡的捷運設施極度相似。這時不禁問起自己“或許去不了新加坡留學在這裡更

適合我? ”。我決定要更深入探索這城市的內涵,於是探訪了台大與它鄰近的市區。也

許是過慣了大學裡隨處遇見相識的人,凸顯了台北這裡的冷漠。對於一開始自問的問題,

答案已經非常的明顯。隔日我帶著失望的心情回到了新竹。

 

從台北回來以後窗外連下起綿綿細雨,室內溫12 度。日曆上距離倒數日期已經不

遠,我從櫥櫃裡拿出累積數月灰塵的行李,開始收拾準備回家慶新年。

 

夜幕降臨,窗外雨還滴答的響著,我靜靜地看著半填滿的行李箱,想著回到家以後

就能仔細的品嚐以前吃膩的菜餚、享受陽光的熱情、從窗口靜靜看野貓的一舉一動、聽

見媽念我的聲音。這遐想間斷出現在我腦中回播一直到我抵達家 。回到家時夜已晚,屋

外溫度約27 度。早睡的母親還沒入睡,她見我時給了我一個溫暖的擁抱 。原以為這時

的我會感動得觸動淚腺,可是恰好相反我的心特別平靜。

 

那夜我從房裡的窗外望出去,漆黑的夜晚中燈火依舊還是一樣的位置,房裡的氣

味和離家前一樣。我呆滯的坐在床邊,在暖和的氣候裡享受當下那份寧靜。從背包裡拿

出在飛機上寫下回來以後要做的清單,仔細想想如何充分的利用在家的時間。

很快廚房的月曆又更換了新數字,表示即將回台灣的日子已經屈指可數。

 

我走出屋外看著眼前這幾隻小貓步覆闌跚,母親懶洋洋地躺著,有種放任它們自

己學習探索的豁達。我蹲下,跨步慢慢接近小貓。母子感覺到異類種族的威脅,用高八

度的嘶聲警告我勿再逼近。我以圓潤,高5 度音的喵聲了回覆以顯友好,小貓見母親的

反應也有樣學樣的發出減弱的嘶叫聲。小貓的母親明白視乎聽得懂人的模仿聲,回頭繼

續傲慢的忽視我的存在,繼續享受夕陽的光照 。

 

看著貓懶洋洋的樣子想起北島在《貓的故事》說過他常妒忌家貓除了三餐剩餘時間

都是睡覺的生活。但人與貓實際上屬於兩種不同的物種。貓依賴人的奉養,而人借貓可

愛的動作暫且忘掉凡塵雜事。 貓往往享受當下的生活,不去顧慮未來、不為去憂慮後代

的發展;人類專注於忙於發展自己的事業、工作換取三餐溫飽 、照顧身邊的人,卻忽視

了周遭生活的美好 。

 

我回憶起上學期在台灣的時光,赫然發現那是我20 年以來渡過最充裕的五個月。

認識一群活潑的馬來西亞留學生、熱心充滿拼勁的台灣人,大家一起在參與活動間玩樂、

吵架時不知覺地創造了共同的回憶,化作這個學期的總結 。這一刻,我明白了為何身處

在黑死病肆虐、科學革命時期的萊布尼茲最終在《神義論》裡寫下“這世界是一切有可

能的世界當中最美好的世界”的結論。雖然我選擇了一個並非我理想中要走的路,但若

重新給我再選擇當初升學道路,依舊選擇當初被迫選下的選擇,選擇做回當下的我 。

 

黃金色的陽光照在我臉上,耀眼的光芒徐徐的往山丘沈下去。眼看夜晚即將降臨,

母親還在學校忙運動會的事務應該來不及回來準備晚餐。我從蹲坐的姿勢站起來動身烹

煮晚餐。兩母子被我突然的舉動驚嚇,同步發出高八度嘶裂聲,這次嘶叫聲振幅比起之

前更大,唯獨這次反而是我這個忽然變身巨人來忽視它們。來到廚房裡。想起以前坐在

飯桌上觀察母親時,她還沒決定今晚的菜單前都會先把洗好的糙米讓文火慢慢的醞釀成

軟面米飯。 母親胃不好,為了方便咀嚼與消化都把飯煮得類似粥的軟度。

 

今晚會有四人用餐,我煮了五人份的飯,而多出的一份是補償接下來一年的思念。

 

飯鍋排氣孔開始噴出的一道蒸汽,站在廚房面對窗口的我。旁晚的陽光透過鐵花

窗傾斜地穿射到廚房裡,被陽光照到平面上都上映了獨一無二的皮影戲,影子與屋後的

香蕉葉同步來回擺動。葉子間的摩擦聲與水槽中水滴落的滴答聲音合奏出簡單的曲子,

我用五味交雜的心情享受這曲子的節奏。

(2016年馬來西亞旅台藝術節徵文比賽散文組第三名)