簡介 ------------ 這速成材料假設讀者已熟習Python, Subversion, 以及一般網站知識 (HTML, servers, 等). 下載 Zope 3 --------------- 這速成是使用 Zope pre-3.2 版本. 新的版本應該沒問題. 留意你需要 Python 2.4 及 Subversion 以取得 Zope 3 主幹版本. 要得到 Zope 的版本, 你可以使用這教材並跟隨指示 (如在視窗環境中, 用 "\" 符號代替檔案名中的 "/" 符號):: mkdir zope3_quick_start cd zope3_quick_start svn checkout svn://svn.zope.org/repos/main/Zope3/trunk zope3 安裝 ------- Linux ~~~~~ 執行以下命令 (注意尾隨點號是命令的一部份):: cd zope3 python setup.py build_ext -i install_data --install-dir . cd .. 視窗 ~~~~~~~ 如果你已安裝適當的編譯器, 你可以在 Linux 使用以上命令 否則, 執行這些命令(注意尾隨點號是命令的一部份):: cd zope3 python setup.py install_data --install-dir . cd .. 然後下載 Tim Peter 的視窗 binaries 給 Zope 3 C 編碼code 及 跟隨網頁指示安裝 (確保你已得到 Python 2.4 版本): http://www.zope.org/Members/tim_one/ 製造事件 (Make an instance) ------------------------------ Zope 3 使用事件 (instances) 來記錄伺服器(或 一組伺服器)的相關資訊 . 我們現在建設一個事件來應用:: python zope3/bin/mkzopeinstance 你將會透過這工具軟件完成以下對答:: Please choose a directory in which you'd like to install Zope 'instance home' files such as database files, configuration files, etc. Directory: instance Please choose a username for the initial administrator account. This is required to allow Zope's management interface to be used. Username: admin Please provide a password for the initial administrator account. Password: Verify password: 當你建成事件後, 修改後轉換至事件文件夾以及執行:: bin/runzope 你應該看到和以下相似的:: ------ 2005-09-28T20:40:11 INFO PublisherHTTPServer zope.server.http (HTTP) started. Hostname: my-computer Port: 8080 ------ 2005-09-28T20:40:11 INFO PublisherFTPServer zope.server.ftp started. Hostname: my-computer Port: 8021 ------ 2005-09-28T20:40:11 INFO root Startup time: 5.538 sec real, 3.120 sec CPU ZMI ------- 如果你打開瀏覽器並連結至 http://localhost:8080 你將看到 ZMI (Zope 管理介面). 繼續並按 "Login" 右上角的連結. 輸入你在建立事件時設定的用戶名稱 以及密碼. 現在在按下右方 "Navigation" 之下的 [top] . 試試新增一些內容物件( Zope 3 事件名字在 ZMI 中是可見的). 留意新增"文件夾"(一個可以裝起其他內容物件的特別的內容物件) 後, 內容物件怎樣列成其結構. ZMI 沒有什麼花巧, 這只是一個預設的 Zope 3 面柀(skin). 你可以修改你喜歡的, 或整個代替. 當你瀏覽 ZMI 完畢後, 返回視窗環境, 在那裏鍵入 "runzope" 及留意你每個瀏覽器的 request 也會在發生後顯示. 按下 Control-C 停止 Zope. Hello World ----------- 我們將編寫一個簡單的 "Hello World" 程式. 我們的第一個內容物件 ~~~~~~~~~~~~~~~~~~~~~~~~ 我們需要打開在 lib/python 目錄的事件及建立一個叫 "hello" 的目錄及在目錄中建立 "hello.py". 在這檔案內, 鍵入這些文字:: import persistent class HelloWorld(persistent.Persistent): greeting = 'Hello' subject = 'world' 這個不同於一個 "普通"的 Python 類(class), 這個從 persistent.Persistent 衍生而成. 那 "Persistent" 基本類別將留意任何在事件發生的改變 以為確保它們會抄寫至 object database (ZODB). 你應要知曉幾個關於 persistence 的東西, 但我們將遲些再參考. 我們還需要一個空白的文件名字為 __init__.py, 將它放在 "hello" 目錄 以便 Python 把它認作包裝 (package). 登記內容類別(Content Type) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 我們需要讓 Zope 3 知道我們希望在 ZMI 的"新增 餐單" 看見新的內容類別. 我們需要在 "hello" 目錄新增一個 "configure.zcml" 檔 及在那裏放一個 "browser:addMenuItem" 指令. ZCML (Zope Configuration Markup Language) 是一個 XML 語言用來設定 Zope 組件. 任何指定的ZCML 可以用給合適的 Python 碼替代, 但 ZCML 通常比較簡潔, 易作成, 及可維護. 第一個在檔案出現的是 "configure" 標簽(tag). 所有 ZCML 檔用 "configure" 標簽開始, 其中包含其他標簽. Zope 使用 XML 名稱集 (namespaces) (那個 "xmlns" 屬性) 以分辨每個標簽的內容. 最基本的標簽是在 http://namespaces.zope.org/zope namespace. 其他我們將在這裏用的名稱集是瀏覽器主導 (browser-specific) 指令. 那 "configure" 標簽還包含那 (隨意的, 但極度建議) "i18n_domain" 指令用來形容國際化區域其 應用在這 ZCML 檔案中可閱讀(human-readable) 的文字 (像下面的 "title" ). 因此我們的 "configure.zcml" 檔會像這樣:: 那 "class" 屬性指明給類使用的模組路徑, 一個起始點號 代表導入相對於這 ZCML 檔的包裝. 因此這裏 Zope 將導入 hello 模組, 然後由那模組導入 "HelloWorld". 那 "title" 屬性提供新增餐單的顯示標題 (我們用"QS" 前綴那標題 因為 Zope 連載另一個 "hello world" 物件, 所以這確保使用正確的 那一個). 那個 "permission" 屬性用來形容一個用者新增一個物件的所需權限. 那 "zope.ManageContent" 權限代表用者可以新增、移除及修改內容 (那個你在新增事件是的 "admin" 用者就是一個這樣的用者). 我們需要告訴 Zope 閱讀我們的 ZCML 檔, 以及最方便的方法是 放一個 "插條" (slug) 至 instance/etc/package-includes 目錄. "插條" 是一個 ZCML 檔案, 其中只包括另一檔案. 這裡就是我們的插條應該有的 樣貌 (另存為 hello-configure.zcml):: 現在我們開始 Zope 備份, 我們可以移至 ZMI 然後新增我們的內容類別, 按下 "QS Hello World" 並輸入給物件的名稱; 取名為 "hello". 如果我們在新增後按下我們的物件, 我們只能看見一個通用的 檢視, 告訴我們物件的類 ("hello.hello.HelloWorld").