跳轉到內容

Zope 3 手冊/入門

來自華夏公益教科書

Python 安裝

[編輯 | 編輯原始碼]

Zope 社群一直建議使用自定義構建的 Python 進行開發和部署。Python 2.4 是 Zope 3 的推薦版本,儘管 Python 2.5 也能正常工作,但尚未正式支援。

GNU/Linux

[編輯 | 編輯原始碼]

要安裝 Python,您需要在系統中安裝 gcc、g++ 和其他開發工具。典型的 Python 安裝可以這樣完成:

$ wget -c https://python.club.tw/ftp/python/2.4.5/Python-2.4.5.tar.bz2
$ tar jxvf Python-2.4.5.tar.bz2
$ cd Python-2.4.5
$ ./configure --prefix=/home/guest/usr
$ make
$ make install

如上所示,您可以提供一個選項--prefix 將 Python 安裝到特定位置。上面的步驟將 Python 安裝到/home/guest/usr 目錄中。

安裝完成後,您可以像這樣呼叫 Python 直譯器(~ 是/home/guest 的別名):

$ ~/usr/bin/python2.4
>>> print "Hello, world!"
Hello, world!

如果您在使用向上箭頭鍵時,Python 互動式提示符中沒有出現舊語句,請嘗試安裝libreadline 開發庫(提示:apt-cache search libreadline)。安裝完該庫後,您應該重新安裝 Python。您還需要安裝zlib(提示:apt-cache search zlib 壓縮庫)才能正確安裝 Zope 3。

MS Windows

[編輯 | 編輯原始碼]

FIXME:使用幾個螢幕截圖編寫有關在 MS Windows 中安裝 Python 的內容。


我們將使用名為 Buildout 的構建工具來開發由多個部分組成的 Zope 3 應用程式。Buildout 將為您提供一個獨立的工作環境來開發應用程式。Buildout 包,名為zc.buildout 可從 PyPI 下載。本節簡要介紹了 Buildout 在開發應用程式中的使用方法。

Buildout 有一個boostrap.py 指令碼,用於初始化一個基於 Buildout 的專案,用於開發或部署。它將在指定的目錄中下載並安裝zc.buildoutsetuptools 和其他依賴模組。啟動後,它將在您專案原始碼頂層的bin 目錄中建立一個buildout 可執行指令碼。每個專案的預設配置是您專案原始碼頂層的buildout.cfg 檔案。每當您執行buildout 命令時,它都會檢視預設配置檔案,並根據它執行操作。通常,配置檔案和啟動指令碼會與專案原始碼本身捆綁在一起。除了與專案原始碼一起提供的預設配置檔案外,您還可以建立系統範圍的預設配置檔案,位於~/.buildout/default.cfg

Buildout 建立者 Jim Fulton 建議使用自定義構建的乾淨 Python 安裝,即您的site-packages 中不應該安裝任何 Python 模組(理想情況下,一個全新的 Python 安裝)。當您使用 Buildout 的boostrap.py 指令碼啟動專案時,它將在指定的目錄中下載並安裝所有必需的包。因此,對於一個理想的專案,您只需要一個自定義構建的乾淨 Python 以及帶有適當的Buildout 配置啟動指令碼以及原始碼包的專案原始碼。

Buildout 配置

[編輯 | 編輯原始碼]

如今,大多數 Python 包都以 egg 格式提供。Buildout 將下載並安裝 egg 到目錄中,並且可以從配置檔案中更改位置。最好為 egg 目錄指定一個系統範圍的位置。此配置可以新增到您系統範圍的配置檔案中。Buildout 的預設配置檔案是~/.buildout/default.cfg。我們將使用您主目錄內的eggs 目錄來儲存所有下載的 egg,因此首先建立這些目錄和檔案:

$ cd $HOME
$ mkdir .buildout
$ mkdir eggs
$ touch .buildout/default.cfg

您可以在~/.buildout/default.cfg 檔案中新增以下內容:

[buildout]
newest = false
eggs-directory = /home/baiju/eggs
find-links = http://download.zope.org/ppix

eggs-directory 是 Buildout 儲存下載的 egg 的位置。最後一個選項find-links 指向 Python Package Index (PyPI) 的可靠映象。上面給出的預設配置將對您系統中的所有 buildout 可用。

MS Windows 注意事項

[編輯 | 編輯原始碼]

FIXME:在此新增 MS Windows 特有的任何要求。


設定開發沙盒

[編輯 | 編輯原始碼]

為了演示概念、工具和技術,我們將開發一個名為Ticket Collector 的簡單票據/問題跟蹤應用程式。要開始工作,首先為專案建立一個目錄。建立目錄後,建立一個buildout.cfg 檔案,如下所示。要啟動此應用程式,請檢出bootstrap.py 並在該目錄中執行它。

$ mkdir ticketcollector
$ cd ticketcollector
$ echo "#Buildout configuration" > buildout.cfg
$ svn co svn://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap
$ ~/usr/bin/python2.4 bootstrap/bootstrap.py

您會看到在bin 目錄中建立了一個buildout 指令碼。現在,您可以更改 Buildout 配置時執行此指令碼。

我們的應用程式本質上是一個 Python 包。首先,我們將建立一個src 目錄來放置我們的包。在src 目錄中,您可以建立ticketcollector Python 包。您可以像這樣建立srcticketcollector 包:

$ mkdir src
$ mkdir src/ticketcollector
$ echo "#Python package" > src/ticketcollector/__init__.py

要開始構建我們的包,您必須建立一個setup.py 檔案。setup.py 應該包含以下最少細節:

我們在此包含了安裝所需的最小包:zope.app.zcmlfileszope.app.twistedzope.app.securitypolicysetuptools

from setuptools import setup, find_packages

setup(
    name='ticketcollector',
    version='0.1',

    packages=find_packages('src'),
    package_dir={'': 'src'},
  
    install_requires=['setuptools',
                      'zope.app.zcmlfiles',
                      'zope.app.twisted',
                      'zope.app.securitypolicy',
                      ],
    include_package_data=True,
    zip_safe=False,
    )

修改buildout.cfg,如下所示:

[buildout]
develop = .
parts = py

[py]
recipe = zc.recipe.egg
eggs = ticketcollector
interpreter = python

現在執行bin 目錄中的buildout 指令碼。這將下載所有必需的 egg 並安裝它們。因此,安裝 Zope 無非是使用帶有install_requires 安裝所需包的setup.py 設定一個buildout。除非您指定了一個以某種方式使用ticketcollectorparts 部分,否則 buildout 不會下載依賴包。

一個簡單的應用程式

[編輯 | 編輯原始碼]

配置應用程式

[編輯 | 編輯原始碼]

在本節中,我們將繼續 Ticket Collector 應用程式的開發。在上一節中,當你執行 ./bin/buildout 命令時,執行我們的應用程式所需的所有 Zope 3 包都會下載到 ~/eggs 目錄中。現在,要執行最基本的 Zope 3,我們需要建立一個 Zope Configuration Markup Language (ZCML) 檔案,並使用適當的 Buildout 食譜擴充套件 buildout.cfg。我們將使用 zc.zope3recipes:appzc.zope3recipes:instancezc.recipe.filestorage 食譜來設定我們的應用程式。以下是我們修改後的 buildout.cfg(位於 ticketcollector 專案目錄中)

[buildout]
develop = .
parts = ticketcollectorapp instance

[zope3]
location =

[ticketcollectorapp]
recipe = zc.zope3recipes:app
site.zcml = 
  <include package="ticketcollector" file="application.zcml" />
eggs = ticketcollector

[instance]
recipe = zc.zope3recipes:instance
application = ticketcollectorapp
zope.conf = ${database:zconfig}

[database]
recipe = zc.recipe.filestorage

然後,我們將在 src/ticketcollector 目錄中建立 application.zcml,其中包含以下內容。現在將其視為模板程式碼,我們將在後面詳細解釋

<configure
  xmlns="http://namespaces.zope.org/zope"
  >

  <include package="zope.app.securitypolicy" file="meta.zcml" />

  <include package="zope.app.zcmlfiles" />
  <include package="zope.app.authentication" />
  <include package="zope.app.securitypolicy" />
  <include package="zope.app.twisted" />

  <securityPolicy 
    component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />

  <role id="zope.Anonymous" title="Everybody"
    description="All users have this role implicitly" />
  <role id="zope.Manager" title="Site Manager" />
  <role id="zope.Member" title="Site Member" />

  <grant permission="zope.View"
    role="zope.Anonymous" />
  <grant permission="zope.app.dublincore.view"
    role="zope.Anonymous" />

  <grantAll role="zope.Manager" />

  <unauthenticatedPrincipal
    id="zope.anybody"
    title="Unauthenticated User" />

  <unauthenticatedGroup
    id="zope.Anybody"
    title="Unauthenticated Users" />

  <authenticatedGroup
    id="zope.Authenticated"
    title="Authenticated Users" />

  <everybodyGroup
    id="zope.Everybody"
    title="All Users" />

  <principal
    id="zope.manager"
    title="Manager"
    login="admin"
    password_manager="Plain Text"
    password="admin"
    />

  <grant
    role="zope.Manager"
    principal="zope.manager" />

</configure>

執行應用程式

[edit | edit source]

現在,你可以透過執行 ./bin/buildout 命令,然後執行 ./bin/instance 命令來執行應用程式。

$ ./bin/buildout
$ ./bin/instance fg

因此,要執行 Zope 3 應用程式,我們需要使用具有適當配置的 buildout 食譜。

使用 ZMI

[edit | edit source]

執行你的例項後,如果你開啟一個 Web 瀏覽器並訪問 https://:8080,你將看到 ZMI(Zope Management Interface)。

繼續點選右上角的 登入 連結。輸入使用者名稱和密碼 admin,它在 applications.zcml 中給出。現在點選右側導航欄中的 [頂部]。嘗試新增一些內容物件(Zope 3 中對在 ZMI 中可見的例項的稱呼)。注意內容物件如何透過新增 資料夾(可以容納其他內容物件的特殊內容物件)來組織成層級結構。

ZMI 本身沒有什麼特別之處,它只是 Zope 3 的預設皮膚。你可以根據自己的喜好對其進行修改,甚至完全替換它。

當你完成對 ZMI 的探索後,返回到輸入 ./bin/instance fg 的視窗,並按 Ctrl-C 停止 Zope 3。

Hello world

[edit | edit source]

現在,你可以在 src/ticketcollector 目錄中開始你的開發工作。建立一個 browser.py 檔案,內容如下

from zope.publisher.browser import BrowserView

class HelloView(BrowserView):

    def __call__(self):
        return """
        <html>
        <head>
          <title>Hello World</title>
        </head>
        <body>
          Hello World
        </body>
        </html>
        """

現在,在 application.zcml 的最後一行之前新增以下內容

<browser:page
  for="*"
  name="hello"
  permission="zope.Public"
  class="ticketcollector.browser.HelloView"
/>

如上所示,我們使用了 browser 名稱空間中的 page 屬性。因此,你需要在 ZCML 開始時包含該名稱空間,如下所示

<configure
   xmlns="http://namespaces.zope.org/zope"
   xmlns:browser="http://namespaces.zope.org/browser"
   >

重啟 Zope 後,開啟 https://:8080/hello,你會看到它顯示了 Hello World

包概述

[edit | edit source]

安裝額外的包

[edit | edit source]

總結

[edit | edit source]

另請參閱

[edit | edit source]

討論

[edit | edit source]
華夏公益教科書