1. 基本概念
Zope框架有一些基本概念,理解了這些概念有助於充分使用Zope。
1.1. Zope是一種框架
Zope涵蓋了很多Web應用程序開發者需要處理的底層細節,比如數據的持續性,數據的完整性,數據訪問控制等等,這樣就可以讓你集中精力在解決問題上。比起其它的語言或框架,Zope可以讓你充分利用Zope提供的服務來更快速的構建web應 用程序。Zope可以讓你使用Python語言來編寫web應用程序中的邏輯處理部分,當然也可以用Perl。Zope還提供兩種方式,就像模板一樣,來處理文本、XML和HTML 這樣的數據,一種式文本模板標記語言(DTML)和Zope頁面模板(ZPT)。
1.2. 面向對象
不同於基於文件的Web模板系統,比如ASP或PHP,Zope是高度面向對象的Web開發平台。許多語言都支持面向對象的概念,包括編寫Zope的Python語言。常見的Web腳本語言比如Perl或PHP部分支持面向對象的特性,通過閱讀“面向對象”這一章可以幫助深入理解這個概念,也可以通過本書中提供的例子來深入理解這個概念。
1.3. 對象出版
Zope之所以形成,其中一個基本的理念是:Web的基礎是面向對象的。指向某個Web資源的URL實際上就是對象容器中對象的路徑。HTTP協議提供了一種對象發送 消息和接收回應的方法。
Zope的對象結構是分層次的,就是說典型的Zope站點是由對象組成的,對象又有可能包含其他對象。根據對象的名稱,Zope按照層次結構通過URL映射到對象。比 如,URL "/Marketing/index.html"可以用來訪問文件夾對象"Marketing"中的名 為"index.html"的文檔對象。
Zope就是以這樣一種直接的方式“出版”你所創建的對象。基本過程如下:
浏覽器給Zope服務器發送請求。請求的URL格式為:protocol://host:port/path?querystring, 比如:
http://www.zope.org:8080/Resources?batch_start=100
Zope把URL分解成:"host(主機)", "port(端口)" "path(路徑)" 和 "query string(查詢參數)"。
(http://www.zope.org, 8080, /Resources 和 ?batch_start=100, respectively)
Zope根據路徑(path,即/Resources)在對象數據庫中定位對象。Zope用傳遞過來的參數來執行這個對象。如果對象執行的結果返回數值,那麼數值就被發送回浏覽器。一般是返回 HTML,文件數據或圖形數據。浏覽器解釋收到的數據並顯示。
Zope對象的URL由包含這個對象的文件夾和對象的id組成,用/符號分開。比如: /Uncles/Bob,就調用Uncles目錄中的Bob。
還比如:
/Uncles/Rick
/Uncles/Danny
/Uncles/Louis
完整的URL就可以是:http://localhost:8080/Bob 。更為詳盡的解釋請參考:Zope 開發指南中的對象出版一章Object Publishing
1.4. 通過Web進行管理
Zope可以通過完全通過浏覽器來創建和處理各種對象。Zope提供的管理界面就像 Windows中的資源管理器。 對象可以按照層次放在任何地方,站點管理者通過點擊對象的不同視圖來管理對 象。不同的對象有不同的視圖。比如“DTML Method”對象有一個標有“Edit”的視 圖,其中可以編輯代碼,“數據庫鏈接對象”(Database Connection)提供修改連 接和參數的視圖。所有的對象都有一個“安全”(Security)視圖,用於管理訪問權 限控制。
1.5. 安全與授權
Zope區別於其它應用服務器的一個顯著特點是Web對象模型和Web開發模型緊密結 合。從而可以讓許多不同的人都可以參與進來, Zope允許對不同的用戶進行安全 授權,從而可以讓頁面設計者,數據庫管理員,以及內容管理員協同工作。
成功的Web站點需要許多人共同參與,比如應用開發者,SQL管理員,內容管理員, 甚至是最終的用戶。此時,安全問題就變得及其重要。如何控制,以及如何分配 權限?比起傳統的基於文件的系統,Zope中的對象提供了豐富得多的安全許可。不同的 對象可以有不同的安全限制,比如對於“SQL Method”對象,你可以允許用戶調用 它,但不能更改或查看源代碼。你還可以限制用戶只能創建某種類型的對象,比如 只能創建文件夾或DTML文檔,而不能創建“SQL Method”對象。
Zope通過“用戶文件夾”("User Folders")來管理用戶。在這個特殊的文件夾中包 含用戶信息。也可以通過添加擴展包來擴展用戶文件夾,從而可以通過關系型數 據庫或LDAP目錄來管理。添加新用戶文件夾的權限可以分派給下級文件夾中的用 戶,從而可以讓你認可的用戶來管理網站中的某一部分。
1.6. 本地對象持續和事務(Persistence and Transactions)
Zope對象存儲在一種高性能的支持事務機制的對象數據庫中,即Zope對象數據庫 (ZODB).對象數據庫認為每個Web請求是個單獨的事務。在Web請求期間,如果執 行過程中發生了錯誤,任何所做的更改都將被取消。對象數據庫還支持多級撤銷, 這樣就可以讓站點管理員僅僅通過點擊“undo”按鈕撤銷更改。Zope框架中實現對 象持續和事務的所有方式對開發者都是透明的。關系型數據庫在Zope框架中依然有效。
1.7. 獲取(Acquisition )
“獲取”(Acquisition)是Zope中非常重要的一個概念,這個概念簡單的說就是:
Zope對象可以被包含在其它對象中(比如文件夾)。對象可以“獲取”它們的容器對象的屬性和行為。
所有的Zope對象都支持獲取,這樣就提供了管理各種資源的非常強大的方式。比 如,經常使用的SQL查詢語句或者一小段HTML代碼,可以在某個文件夾中定義,通 過”獲取“這樣一種機制就可以讓下級文件夾自動調用。如果這個SQL查詢進行了修 改,不用擔心下級文件夾,這個修改對所有下級文件夾都有效。
因為在搜索對象的時候是按照從當前目錄往上按照層次來獲取的,因此很容易指定 生效的范圍。比如,有一個包含與體育內容相關的文件夾“Sports”,你可以在這 個文件夾中創建新的頁眉和頁腳文件。這樣就可以使“Sports”文件夾和下級文件夾 中調用這兩個文件。而不會調用“Sports”上級文件夾中的文件。
在“獲取”一章中將詳細講述這一概念
1.8. Zope是可擴展的
Zope是高度可擴展的,可以通過多種方法創建新的Zope對象,即可以通過用Python 語言編寫新的擴展模塊,也可以完全通過Web來創建。Zope已經包含了很多內置的 組件,這些組件可以幫助進行擴展。Zope當中已經包含了一系列框架類,這些類在 創建新Zope對象時用來處理細節問題。
Zope已經有了很多擴展產品,這些擴展產品用於增強Zope的功能,比如添加論壇、 數據處理、XML工具,以及電子商務程序等等。這些程序大多數是由Zope愛好者編 寫的,並且大多數是開放源代碼的。
2. 基礎Zope組件
Zope由一些不同的組件構成,從而幫助你構建web應用程序。
Zope 架構
說明:
ZServer
這是Zope內置的Web服務器,用於提供內容服務。這個web服務器還通過FTP、 WebDAV?和XML-RPC協議提供服務。
Web Server(Web服務器)
Zope還可以和現有的Web Server結合在一起,比如Apache或者Microsoft IIS,以及其它支持通用網關接口(CGI)的Web服務器。
Zope Core(Zope核心)
這是Zope的核心引擎,它控制如何顯示,以及控制管理界面和對象數據庫。
Object Database(對象數據庫)
使用Zope的時候,大多數情況下是在處理存儲在Zope對象數據庫中的對象。
Relational database(關系型數據庫)
數據不一定要存儲在Zope對象數據庫中,Zope中可以使用其它的關系型數據庫,比如 Oracle, PostgreSQL?, Sybase, MySQL等等。
File System(文件系統)
Zope還可以使用存儲在服務器文件系統中的文檔和其它文件。
ZClasses
可以通過使用Web管理界面來添加新的對象。ZClasses?就是這種對象。
Products(產品)
Zope中還可以通過在Zope服務器中的文件系統裡安裝“產品”文件來添加新的對象。