Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

OpenFoundry自由軟體充電報

OpenFoundry自由軟體充電報
無/報主.自由軟體鑄造場

本期內容:
[技術專欄] Django 簡介
[源碼報報] 紅帽發表即時 Linux 擴充功能 協助企業 IT 架構部署即時運算能力

[技術專欄] Django 簡介

◎ 前言

西元 1999 年,PHP 正慢慢席捲全球,台灣也在當年七月出版第一本 PHP 與 MySQL 結合的書(紅色書皮),猶記得當時要開發動態網頁的朋友們,都是人人一本紅皮書。PHP 的出現使得動態網頁的開發變得更容易,由於門檻降低,開發難度降低,更多的人有機會接觸動態網頁的設計。

然而,有使用過 PHP + MySQL 的人大概都知道,雖然開發動態網頁的難度降低了,但是使用它仍然很傷腦筋,因為處理資料的進出是一件很瑣碎的事情。我們需要寫讀取資料所要下的 SQL 指令、取出資料時也有 SQL 指令、又驗證使用者輸入資料的合法性等,每一項都是很繁瑣,很容易出錯,常常要寫一個很簡單的功能就因為這些瑣碎的功夫而花上龐大的時間。

由於這幾年動態網站的需求大量增加,便有人開發出各種不同的 web frameworks,而這些 frameworks 的出現將會一改之前這些瑣碎的步驟!設計一個動態網頁只需要短短的程式碼,甚至是你完全不用操心 SQL 要下的指令,因為這些事情 framework 都幫你處理好了。當然,有了這些框架,以往對於動態網頁的思維也有所改變。以下就介紹其中一個 framework ,名為 Django(D不發音),它是一個以 Python 為語言的 Web framework ,當筆者第一次碰觸時,也被它神奇的力量所吸引著!

 

◎ Django

Django 是一個用 Python 所寫的高階網頁框架,它可以讓人快速的開發實用又乾淨的網頁。Django 原是兩年前因應某一個線上新聞網站的運作開發而成的,它的設計主要是為了能處理密集的新聞資料,以及讓網站開發者可以在最短的時間內看到網站開發的內容。Django 最重要就是可以讓你快速開發一個高效能及精緻的網站。

咱們來看一下 Django 主要的內容以及運作方式吧。Django 自己有內附一個 HTTP server,使用者從瀏覽器透過 HTTP server 來要求資料時,server 會對照 urls.py 來找到相對映的 Python 程式來處理。在處理的過程當中,通常我們會讀某一個 template 檔,而此時 Django 就會將 template 所需要的資料都處理過後,再做回應。這是一個較籠統的說法,但是有很多概念與之前我們使用 PHP + MySQL 開發網頁已經很不相同了,因此在下面依照各項不同點來做介紹。

◎ URL 概念的改變

以往我們的概念總是一個 URL 對應到一個檔案,如 http://localhost/test.htm ,那麼我們讀取的網頁毫無疑問的就是 test.htm。然而若是動態網頁,我們會發現其實這樣子的分類並不恰當,因為網頁其實可以用功能性來做區分。例如某一個通訊錄網頁,它其中一個頁面是人員名單,另外有好多個頁面是個人詳細的資料,此時我們就可以將他區分為兩塊,一個也許叫做 list,而另一個就是 detail。此時呈現網址的狀況就和我們以往的習慣不同,變為:

http://localhost/list/
http://localhost/detail/1/
http://localhost/detail/2/
http://localhost/detail/3/
http://localhost/detail/4/

而處理這些眾多網址的程式卻只有兩個,一個是 list 的處理程式,另外一個則是 detail 的處理程式,後面的 1、2、3、4 則成為 detail 這支程式的參數。

就因為網址的型態從檔案改為功能區分,因此我們會需要一個有效的方式來處理。在 Django 中,它是讀取一個名為 urls.py 的檔案,其中網址的部份使用「正規表示式 (Regular Expression)」 來做核對,若是某一部分 match 了,則使用某一支程式來處理這個 request。
◎ 資料不再是表單

若承接上文─以通訊錄為例,我們通常會建立一個 SQL 表單叫做 contacts,裡頭有很多欄位,諸如 name、email、phone、address 等。然而在 Django 中,它將這樣表單的概念直接轉為物件導向中的類別 (class)。我們會建立一個叫做 Contact 的 python 類別,而裡頭有很多成員 (members),就和表單的欄位一樣,有 name、email、phone、address 等。

class Contact(meta.Model):
    id = meta.AutoField("ID", primary_key=True)
    name = meta.CharField("Name", maxlength=30)
    email = meta.EmailField()
    phone = meta.CharField("Phone", maxlength=16)
    address = meta.CharField("Address", maxlength=100)

最神奇的一個步驟在於,當你寫好這個 Python 類別,我們只消用 Django 所附的工具程式 (manage.py),即可將這個 Python 類別轉成 SQL 指令,包括建立、查詢、更新、新增資料等。而且可以依照不同的 SQL 而產出不同 SQL 語法 (如 MySQL、postgreSQL 等)。

$ python manage.py sql phonebook
 
CREATE TABLE `phonebook_contacts` (
    `id` mediumint(9) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(30) NOT NULL,
    `email` varchar(75) NOT NULL,
    `phone` varchar(16) NOT NULL,
    `address` varchar(100) NOT NULL
);
COMMIT;

◎ Template: 樣板

有別於原始的 PHP 寫法,Django 使用樣板來呈現網頁的內容。樣板大部分都是 HTML 的程式碼,只有資料的部份會用特殊的 Django template 格式來取代,當然還有一些控制的機制例如 for 迴圈、if else 判斷等。這樣一來,網頁設計的部份就和資料的處理分離,不論是資料處理或是網頁的部份,程式碼看起來都乾淨許多。

一個簡單的樣板會長的像這樣:

{% if object_list %}
<table border="1">
  <tr><td>姓名</td><td>電郵</td><td>電話</td><td>住址</td></tr>
 
{% for object in object_list %}
  <tr><td>{{ object.name }}</td><td>{{ object.email }}</td><td>{{ object.phone }}</td><td>{{ object.address }}</td></tr>
{% endfor %}
 
</table>
 
{% else %}
<p>No entries...</p>
{% endif %}

◎ 總結

依照上述的介紹,Django 主要就是先對照 url,找到適當程式後,進入該程式;接著處理完資料部份後,就將樣板叫出來,並把資料的部份放上去,接著回傳。大略來說 Django 的運作方式即是如此。當然它還其他功能這邊並沒有介紹,例如使用者輸入(表單)處理的部份,然而筆者也是剛接觸這個架構,還正在摸索當中。

我認為這是一套很棒的架構,但是由於他還正在演化當中,並且文件說明有些複雜,很難快速的找到答案,因此上手仍然需要一些時間。然而一旦上手後,我相信他會是一個非常強而有力的框架!


(編按:看完以後,對Django的強大功能躍躍欲試了嗎?敬請期待下期更詳盡的實作部分!)



[源碼報報] 紅帽發表即時 Linux 擴充功能 協助企業 IT 架構部署即時運算能力

開放源碼公司紅帽(Red Hat)發表了在該公司 Linux 上的即時擴充功能。部份功能根據紅帽宣稱,比類似的競爭技術,要快上一百倍。即時 Linux 版本鎖定的是有可預測回應需求的應用軟體,例如程序控管或金融市場的交易應用。


紅帽的即時傳訊網格(Messaging Real-time Grid,MRG)以 beta 版本釋出,2008 上半年將釋出完整版本。MRG 是紅帽企業 Linux 平台(Red Hat Enterprise Linux)的延伸功能,專為銀行等需要 IT 系統即時完成交易的企業需求所設計。

MRG 包含了傳訊佇列中介軟體,基於先進傳訊佇列協定(Advanced Message Queuing Protocol,AMQP),讓應用軟體彼此溝通。MRG 是 AMQP 第一套商業實作。開放源碼系統 AMQP,根據紅帽副總裁 Scott Crenshaw 表示,比 Tibco 與 IBM 的私有競爭產品,要快上一百倍。

Crenshaw 認為這種效能上的大幅提升,還會有持續突破,並且將其歸功於社群開發模式。

Crenshaw 表示,MRG 使紅帽的核心作業系統有了即時能力。透過即時作業系統,IT 經理人將能確保系統反應時間,無須過度擴充系統只為了達到所需的服務層級。他們的預測,企業基礎架構將全面納入即時能力。

MRG 可說是紅帽上個月發表的自動化策略的首批成果。紅帽希望藉由該策略,為使用者與軟體廠商簡化企業基礎架構建構。紅帽 EMEA 區域副總裁 Werner Knoblich 表示,隨處都可以執行所有的應用程式,像是實體伺服器、虛擬伺服器、計算網雲(compute cloud)或應用裝置等。軟體廠商只需驗證一次,就可以確保軟體在隨處執行無誤。

MRG 平台另一項功能是網格能力。企業可以利用該公司從 Linux 桌面系統,「借用」閒置的處理器時間,並管理分散式工作負載,排定位於本地或遠端網格的工作。

Crenshaw 說,過去網格只應用在高效能運算上(high-performance computing,HPC),現在他們延伸到了所有的應用軟體,他們稱之為高生產力運算(high throughput computing,HTC)。例如,當網頁伺服器需求增加時,企業的資訊系統就要能夠運用桌面與商業網格服務的計算能力,例如 Amazon 的彈性計算網雲(Elastic Compute Cloud)。

這項分散式運算技術來自紅帽與威斯康辛大學(University of Wisconsin)的合作,以及其高生產力計算專案 Condor。從桌面系統借用處理器時間的技術,是基於和 Intel 的 vPro 桌面管理技術的整合,從而改進了紅帽企業 Linux 桌面系統管理能力。

MRG 可以執行在 Java、Solaris 與 .Net 平台上。根據紅帽的說法,目前以在紅帽企業上的效能最好。Crenshaw 表示這套系統第一位客戶是美國海軍(U.S. Navy)。他說,幾年前對方就曾為了船艦、武器控制系統跟他們接洽。


相關網址:
1.紅帽宣佈 Linux 即時擴充功能
2.紅帽推出即時 Linux



報主的話:
本電子報為摘要版,若欲訂閱全文版請按此