用 C 扩展 Python 和 Zope
2008-09-30 13:06:49 来源:WEB开发网要知道的是 Product 封装了一个或多个可从 ZClass、脚本或直接从 Web 上的 URL 使用的类。(当然,在最后一种情况下,Product 的实例被当作文件夹看待;那么 URL 的最后部分指定了将被调用的方法,该方法返回任意的 HTML。)您不必一定要把 Product 当作“可添加的”对象来对待,虽然这是它的主要目的。要看一个优秀的、现实存在的示例,可以去看 ZCatalog 实现,它是标准 Zope 分发的一部分。那里您可以在 __init__.py 中看到一个非常简单的安装脚本,可以在 ZCatalog.py 中看到 ZCatalog 类,该类提供了很多发布方法。请注意 Zope 采用一种奇怪的约定来确定哪些方法可以通过 Web 访问 ― 如果一个方法包含有一个 doc 字符串,那么该方法可通过 Web 访问;否则,就被认为是私有的。
无论如何,我们还是来看一个使用了 C 模块(我们在上面定义了它)的非常简单的 Product。首先来看非常简单的 __init__.py;请注意它只做了一件事,即告诉 Zope 我们正在安装的类的名称。更复杂的初始化脚本能做 更多的事,包括声明由服务器维护的全局变量以及设置访问权限等等。欲了解更多详细信息,请参阅在线文档中的 Zope 开发者指南,也请研究您的 Zope 安装目录中现成的 Product。您或许已经猜到了,我们的示例 Product 被称为“Foo”。这样您就将在 lib/python/Products 目录下创建一个 Foo 子目录。
清单 4. 基本的 Product 初始化脚本
import Foo
def initialize(context):
context.registerClass(
Foo.Foo,
permission='Add Foo',
constructors=Foo.manage_addFoo
)
现在请注意这个初始化脚本不仅导入了那个类,使它可被 Zope 的其它部件访问,而且还将该类注册成具有“可添加性”。 context.registerClass 调用通过首先命名我们所导入的类,然后指定可被用于添加实例的方法名称(这个方法必须显示一个管理页面,且该方法将自动与 Zope 管理界面集成)的名称来完成这项工作。酷。
更多精彩
赞助商链接