簡介
------------
這速成材料假設讀者已熟習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").