原文:
转自:杜文山 《快乐程序》第一辑 Zope概念和架构
1. 基本概念
* 1.1. Zope是一种框架
* 1.2. 面向对象
* 1.3. 对象出版
* 1.4. 通过Web进行管理
* 1.5. 安全与授权
* 1.6. 本地对象持续和事务(Persistence and Transactions)
* 1.7. 获取(Acquisition )
* 1.8. Zope是可扩展的
2. 基础Zope组件
1. 基本概念
Zope框架有一些基本概念,理解了这些概念有助于充分使用Zope。
1.1. Zope是一种框架
Zope涵盖了很多Web应用程序开发者需要处理的底层细节,比如数据的持续性,数据的完整性,数据访问控制等等,这样就可以让你集中精力在解决问题上。比起其它的语言或框架,Zope可以让你充分利用Zope提供的服务来更快速的构建web应用程序。Zope可以让你使用Python语言来编写web应用程序中的逻辑处理部分,当然也可以用Perl。Zope还提供两种方式,就像模板一样,来处理文本、XML和HTML 这样的数据,一种式文本模板标记语言(DTML)和Zope页面模板(ZPT)。
1.2. 面向对象
不同于基于文件的Web模板系统,比如ASP或PHP,Zope是高度面向对象的Web开发平台。许多语言都支持面向对象的概念,包括编写Zope的Python语言。常见的Web脚本语言比如Perl或PHP部分支持面向对象的特性,通过阅读“面向对象”这一章可以帮助深入理解这个概念,也可以通过本书中提供的例子来深入理解这个概念。
1.3. 对象出版
Zope之所以形成,其中一个基本的理念是:Web的基础是面向对象的。指向某个 Web资源的URL实际上就是对象容器中对象的路径。HTTP协议提供了一种对象发送消息和接收回应的方法。
Zope的对象结构是分层次的,就是说典型的Zope站点是由对象组成的,对象又有可能包含其他对象。根据对象的名称,Zope按照层次结构通过URL映射到对象。比如,URL "/Marketing/index.html"可以用来访问文件夹对象"Marketing"中的名为"index.html"的文档对象。
Zope就是以这样一种直接的方式“出版”你所创建的对象。基本过程如下:
1. 浏览器给Zope服务器发送请求。请求的URL格式为:protocol://host:port/path?querystring, 比如:
http://www.zope.org:8080/Resources?batch_start=100
2. Zope把URL分解成:"host(主机)", "port(端口)" "path(路径)" 和 "query string(查询参数)"。(http://www.zope.org, 8080, /Resources 和 ?batch_start=100, respectively)
3. Zope根据路径(path,即/Resources)在对象数据库中定位对象。
4. Zope用传递过来的参数来执行这个对象。
5. 如果对象执行的结果返回数值,那么数值就被发送回浏览器。一般是返回 HTML,文件数据或图形数据。
6. 浏览器解释收到的数据并显示。
Zope对象的URL由包含这个对象的文件夹和对象的id组成,用/符号分开。比如: /Uncles/Bob,就调用Uncles目录中的Bob。
还比如:
/Uncles/Rick
/Uncles/Danny
/Uncles/Louis
完整的URL就可以是:http://localhost:8080/Bob 。 更为详尽的解释请参考:Zope 开发指南中的对象出版一章Object Publishing
1.4. 通过Web进行管理
Zope可以通过完全通过浏览器来创建和处理各种对象。Zope提供的管理界面就像 Windows中的资源管理器。对象可以按照层次放在任何地方,站点管理者通过点击对象的不同视图来管理对象。不同的对象有不同的视图。比如“DTML Method”对象有一个标有“Edit”的视图,其中可以编辑代码,“数据库链接对象”(Database Connection)提供修改连接和参数的视图。所有的对象都有一个“安全”(Security)视图,用于管理访问权限控制。
1.5. 安全与授权
Zope区别于其它应用服务器的一个显著特点是Web对象模型和Web开发模型紧密结合。从而可以让许多不同的人都可以参与进来, Zope允许对不同的用户进行安全授权,从而可以让页面设计者,数据库管理员,以及内容管理员协同工作。
成功的Web站点需要许多人共同参与,比如应用开发者,SQL管理员,内容管理员,甚至是最终的用户。此时,安全问题就变得及其重要。如何控制,以及如何分配权限?比起传统的基于文件的系统,Zope中的对象提供了丰富得多的安全许可。不同的对象可以有不同的安全限制,比如对于“SQL Method”对象,你可以允许用户调用它,但不能更改或查看源代码。你还可以限制用户只能创建某种类型的对象,比如只能创建文件夹或DTML文档,而不能创建“SQL Method”对象。
Zope通过“用户文件夹”("User Folders")来管理用户。在这个特殊的文件夹中包含用户信息。也可以通过添加扩展包来扩展用户文件夹,从而可以通过关系型数据库或LDAP目录来管理。添加新用户文件夹的权限可以分派给下级文件夹中的用户,从而可以让你认可的用户来管理网站中的某一部分。
1.6. 本地对象持续和事务(Persistence and Transactions)
Zope对象存储在一种高性能的支持事务机制的对象数据库中,即Zope对象数据库(ZODB).对象数据库认为每个Web请求是个单独的事务。在Web请求期间,如果执行过程中发生了错误,任何所做的更改都将被取消。对象数据库还支持多级撤销,这样就可以让站点管理员仅仅通过点击“undo”按钮撤销更改。Zope框架中实现对象持续和事务的所有方式对开发者都是透明的。关系型数据库在Zope框架中依然有效。
1.7. 获取(Acquisition )
“获取”(Acquisition)是Zope中非常重要的一个概念,这个概念简单的说就是:
* Zope对象可以被包含在其它对象中(比如文件夹)。
* 对象可以“获取”它们的容器对象的属性和行为。
所有的Zope对象都支持获取,这样就提供了管理各种资源的非常强大的方式。比如,经常使用的SQL查询语句或者一小段HTML代码,可以在某个文件夹中定义,通过”获取“这样一种机制就可以让下级文件夹自动调用。如果这个SQL查询进行了修改,不用担心下级文件夹,这个修改对所有下级文件夹都有效。
因为在搜索对象的时候是按照从当前目录往上按照层次来获取的,因此很容易指定生效的范围。比如,有一个包含与体育内容相关的文件夹“Sports”,你可以在这个文件夹中创建新的页眉和页脚文件。这样就可以使“Sports”文件夹和下级文件夹中调用这两个文件。而不会调用“Sports”上级文件夹中的文件。
在“获取”一章中将详细讲述这一概念
1.8. Zope是可扩展的
Zope是高度可扩展的,可以通过多种方法创建新的Zope对象,即可以通过用Python 语言编写新的扩展模块,也可以完全通过Web来创建。Zope已经包含了很多内置的组件,这些组件可以帮助进行扩展。Zope当中已经包含了一系列框架类,这些类在创建新Zope对象时用来处理细节问题。
Zope已经有了很多扩展产品,这些扩展产品用于增强Zope的功能,比如添加论坛、数据处理、XML工具,以及电子商务程序等等。这些程序大多数是由Zope爱好者编写的,并且大多数是开放源代码的。
2. 基础Zope组件
Zope由一些不同的组件构成,从而帮助你构建web应用程序。下图显示了这些基础 Zope组件:
[myimg]upload/zopearchitecture.png[/myimg]
说明:
ZServer?
这是Zope内置的Web服务器,用于提供内容服务。这个web服务器还通过FTP、 WebDAV?和XML-RPC协议提供服务。
Web Server(Web服务器)
Zope还可以和现有的Web Server结合在一起,比如Apache或者Microsoft IIS,以及其它支持通用网关接口(CGI)的Web服务器。
Zope Core(Zope核心)
这是Zope的核心引擎,它控制如何显示,以及控制管理界面和对象数据库。
Object Database(对象数据库)
使用Zope的时候,大多数情况下是在处理存储在Zope对象数据库中的对象。
Relational database(关系型数据库)
数据不一定要存储在Zope对象数据库中,Zope中可以使用其它的关系型数据库,比如 Oracle, PostgreSQL?, Sybase, MySQL?等等。
File System(文件系统)
Zope还可以使用存储在服务器文件系统中的文档和其它文件。
ZClasses?
可以通过使用Web管理界面来添加新的对象。ZClasses?就是这种对象。
Products(产品)
Zope中还可以通过在Zope服务器中的文件系统里安装“产品”文件来添加新的对象。