首页/Python/Zope中的基础对象

来自Ubuntu中文
Oneleaf留言 | 贡献2007年5月30日 (三) 17:51的版本 (新页面: == Zope中的基础对象 == 转自 PostgreSQL中文网站 作者:tingle Zope对象能帮我们处理不同的任务,不同的对象可处理应用程序中的不同部份。一些...)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索

Zope中的基础对象

转自 PostgreSQL中文网站 作者:tingle

Zope对象能帮我们处理不同的任务,不同的对象可处理应用程序中的不同部份。一些对象可保存内容(文本、电子表格和图象等);一些对象可处理逻辑操作,如接收Web表单的输入 或执行脚本;一些对象可控制内容的显示,如显示网页、邮件等。

一般来说,基础的Zope对象有以下三类:

  • 内容对象:
      内容对象可保存各种文本二进制数据,另外,内容对象还可存取外部数据,如系统文件和关系数据库。

  • 显示对象:
      Zope提供两种对象来控制网站的显示,一种是DTML,一种是ZPT。两者间的不同点是,DTML同时处理显示和逻辑关系,ZPT则可与表现层分离。

  • 逻辑处理对象:
      Zope提供了一些工具帮助我们处理商业逻辑。有三种对象可处理进行逻辑处理:DTML,python script,perl script。通过这些对象我们可以改变对象属性、发送信息和邮件、进行条件测试和对某些事进行动态反馈等。
      DTML对象的分类有些不清,它即可作为显示对象,也可作为逻辑处理对象。我们还可安装第三方的Zope对象来扩展zope的功能。我们通常称这些对象为“产品”


内容对象:Folders,Files,and Images

  • Folders
      Zope的Folder对象主要用于包含其它对象,包括Folder。文件夹的结构对于安全和显示很重要,建立时需考虑清楚。

  • Files
      Zope的Files对象包含raw数据,象音频、视频和文档。它还可保存一些Files对象不支持的内容,如Flash文件、Java Applets等。Files对象保存内容时不考虑内容的类型,所以可以用Files对象来保存任意的数据。
    每个File对象都有一个叫“content type”的属性,该属性符合MIME标准。如:“text/plain(纯文本)”、“text/html(html格式)”、 “application/pdf(pdf格式)”。当你上传一个文件时,zope会根据文件名自动分配一种MIME类型给“content type”属性。

    • 建立和编辑文件
        从zmi 右上角的对象添加列表中选择“File”,按“Add”。并填上“id”(必填)、“title”(可选)。如果想建立一个空白文件,直接按“Add”即可,如果想上传一个文件,可按“Browse”按钮,从本地选择一个文件上传。文件一旦建立,就可打开进行内容编辑或修改属性。也可通过“upload” 功能通过本地文件更新它。

    • 浏览文件
        编辑和上传完文件后,我们可通过“view”标签来浏览文件内容。当然前提是要zope能识别该文件的类型,否则zope会弹出一个下载窗口,要求你下载该文件。你也可直接通过浏览器显示文件内容,例如有一个放在zope的根目录下的test.pdf文件,你只要在浏览器输入Http://localhost:8080/test.pdf即可!

  • Images
      Image对象包含如GIF,JPEG,PNG格式的文件,和文件对象很类似,但Image对象包含一些专有的属性,如图像的宽、高等属性。

显示对象:ZPT 和 DTML

表现层和逻辑层应该分开。表现层负责显示静态和动态内容。一般是html文档。ZPT采用XML名称空间元素,能有效分离逻辑层和表现层。DTML采用 “tags”元素,所以表现层和逻辑层分离得不好。ZPT和DTML都是“server-side”技术,就象SSI,PHP,JSP一样。代码都由服务器来执行。

ZPT VS DTML:相同的目的,不同的作用

“tag -based”的脚本语言不能很好地分离表现层和逻辑层。如DTML、SSI、PHP和JSP。这样使程序设计师和网页设计师不能很好地分工合作。为了有效分离表现层和逻辑层,就产生了ZPT这种“attribute-based”的语言。这两种语言在zope中支持,而且为一直共存。ZPT和DTML的功能有些重复,致使一些人感到困惑,不知怎么选择。下面有几点提示希望能帮到大家更好地使用这两种语言:

  • 如果你的团队包含程序设计师和网页设计师的团队,就应该选择ZPT,以使团队能更好地分工合作。

  • ZPT建立的页面需是XHTML、XML兼容,而DTML不用。ZPT不能动态改变CSS样式表、SQL语句等,但DTML可很容易实现。

  • DTML能提供很好的条件控制语句,在这方面,DTML更像PHP、ASP这样的脚本语言。可以用DTML来替代它们。

  • 表现层与逻辑层分离也不是适用于所有情况,所以有时DTML能比ZPT工作地更好。

建立、编辑、浏览ZPT文档

建立、编辑和浏览ZPT文档与File对象相似,这里就不写了。一些内容可参考第10章。

DTML对象:DTML Documents 和 DTML Methods

DTML对象包括DTML文档和DTML方法两种。DTML对象受到zope安全机制的约束,所以能安全地显示内容。

DTML 文档和DTML方法有什么不同呢?表面上,两者都包含DTML代码和数据,都有相同的用户接口和API。DTML方法主要用于显示其它对象,DTML文档用于显示本身的内容。DTML文档支持属性功能,DTML方法不支持属性。一般来说,你应该用DTML方法来存放DTML内容,除非你有一个好的理由需使用DTML文档,如你需要使用对象属性。详细介绍请参考13、14章。

建立、编辑、浏览DTML

建立、编辑、浏览DTML操作同File,这里不细说。详细介绍请参考13、14章。

逻辑对象:Script(Python)对象和外部方法

逻辑对象返回数据给显示对象进行显示。在zope中内置的逻辑对象有python script和外部方法,这两种对象都是使用Python脚本语言来开发的。现在也可以使用perl script这个附加的逻辑对象了。好象也有一些产品可以在zope中使用php和jsp,如PHParser,PHPObject和ZopeJSP,但我没试过。

外部方法

外部方法和Script(Python)对象差不多,都是采用python脚本语言编写,作用也一样,但它们一些不同:

  • 外部方法不能用ZMI编辑,它放到本地文件系统中的zope实例目录的Extensions目录下。

  • 由于外部方法不在ZMI中编辑,所以它不受zope的安全机制约束,可以直接访问本地文件系统,能导入和执行任意的python模块和代码。

  • 外部方法不支持“bindings”的概念。