zope3 速成指引
Note: This is the print view with all the tutorial pages on one page. The paginated version is available here, if you prefer that.
准备工作
簡介
這速成材料假設讀者已熟習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
我們將編寫一個簡單的 "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" 檔會像這樣:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="hello"
>
<browser:addMenuItem
class=".hello.HelloWorld"
title="QS Hello World"
permission="zope.ManageContent"
/>
</configure>
那 "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):
<include package="hello" />
現在我們開始 Zope 備份, 我們可以移至 ZMI 然後新增我們的內容類別, 按下 "QS Hello World" 並輸入給物件的名稱; 取名為 "hello". 如果我們在新增後按下我們的物件, 我們只能看見一個通用的 檢視, 告訴我們物件的類 ("hello.hello.HelloWorld").
