跳转到内容

Zope 3 手册/入门

来自维基教科书,开放世界中的开放书籍

Python 安装

[编辑 | 编辑源代码]

Zope 社区一直建议使用自定义构建的 Python 进行开发和部署。Python 2.4 是 Zope 3 的推荐版本,尽管 Python 2.5 也能正常工作,但尚未正式支持。

GNU/Linux

[编辑 | 编辑源代码]

要安装 Python,您需要在系统中安装 gcc、g++ 和其他开发工具。典型的 Python 安装可以这样完成:

$ wget -c https://www.pythonlang.cn/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://127.0.0.1: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://127.0.0.1:8080/hello,你会看到它显示了 Hello World

包概述

[edit | edit source]

安装额外的包

[edit | edit source]

总结

[edit | edit source]

另请参阅

[edit | edit source]

讨论

[edit | edit source]
华夏公益教科书