第一章 zope简介
第二章 使用zope
zope用户
1、紧急用户 在zope中很少用到,这个帐号用于创建其它用户帐号以及你无意中导致自已被锁无法进入到zope时修复错误。
这只能创建一种类型的对象----用户对象。
2、管理员 相当于超级用户。
3、其它用户 一般用户。
创建用户
管理员可以在一种被称为用户文件夹的特殊类型文件夹中创建zope用户。
第三章 使用基本zope对象
zope对象一般分成三类
1、内容----文档,图像或文本文件,二进制文件等。还可处理关系数据库里的内容。
2、逻辑----python,perl,sql脚本。
3、表现----网页,外观等
可通过ftp,webdav,put远程编辑文档
文件可上载,可通过view标签来查看,如pdf文件。
对象属性
string字符串型 它是任意长度的字符序列,是zope中最常用的属性类型。
int整型 整数,可以是任何正数负数,不能是分数。保证至少32位长。
long长整型 和整数一样,只是没有范围限制。
float浮点型 保存小数
lines行型 属于字符串序列。
tokens标识型 用空格分开的单词序列。
text文本型 象字符串型,区别在于zope规格化行结束符。
selection选择型 用于处理html的选择处理输入框。
multiple selection多选型 用于处理html的多选表单输入框。
对象属性是非常有用的工具,它适合使用少量的数据或信息来标记你的zope对象。
使用方法
zope自带有两种类型的方法:DTML和SQL。在zope2.3以前,DTML方法是zope中通过web编写脚本的唯一方式。2.3后引入了
两种新的脚本对象,python和perl。
它可嵌套到任何深度。
名称句法检测是否存在一个名称,以及它的值。 xxx ,如果变量不存在,则条件
为假。如果有一个变量,但它为假,这个条件也为假。如果变量不0,None,空序列或空字符串,此时条件为真。
python表达式句法不检测变量是否存在。 xxx ,如果变量不存在,则返回KeyError。
还有else和elif标记符,处理条件选择。
in标记符
它叠代一个对象序列,为每个序列完成一个执行块。在编程中,经常被称为叠代或循环。每次叠代,in标记块中的内容被执行一次。
这个例子遍历一个名为todo_list的对象列表,它为列表中每个数据项插入一段描述该数据项的HTML段落。
叠代显示文件夹内容,隔行换用颜色。
第五章 创建基本zope应用程序
使用文件夹来创建应用程序,每个文件夹可以看作一个应用程序,所有程序放在这个文件夹下。
特殊的文件夹对象index_html,就象apache中的index.html。
创建zope动物园web站点
动物园导航 navigation dtml方法。
Return to parent
#设置返回链接,通过if条件判断是否是最顶级,如果是就不出现这个链接。
建立一个standard_html_header,并放入navigation,这样在站点的每一个页面中都可用导航系统。
下一步,给动物园添加一个首页。建立一个名为index_html的dtml方法。
现在可以在子文件夹内再设置一个index_html以表示子文件夹的默认页面,取代上级目录的index_html。
利用样式表
定义一个style_sheet的DTML文档,设置css。并把它包含在页眉中。
h1 {
font-size:24pt;
font-family:sans-serif;
}
p {
color:#220000;
}
body {
background:#ffffdd;
}
把它加到navigation中
现在所有应用该页眉的页面都有相同的风格。如果网站某个部份需要更换样式信息,只需创建一个新的style_sheet文档并放在这个
文件夹中就可以了。这样那个文件夹和它的子文件夹中的所有页面都使用新的风格。
创建一个文件库
当你上载,修改或删除文件时,zope能动态改变文件链接。创建一个文件夹files,建立一些文件。并建立一个index_html:
以上语句列出files中所有的文件对象(用File对象添加的)。
大多数zope对象有一个bobobase_modification_time方法,它返回对象的最新修改时间。我们可以在index_html中添加它。
还可以添加按文件名或修改时间进行排序的功能,具体代码如下。比较复杂,需好好理解。
第六章 用户和安全
acl_users用户文件夹包含用户对象,它定义了zope用户帐号。单击add按钮可创建一个新用户。domains字段让你限制用户可
以登录的internet域。如果我只想myjob.com域的人登录,可以把它写到domains内。domains内也可以填IP地址和使用*号
通配符,如123.123.123.*。
如果你指定一个域并且让密码为空,那么来自许可域的任何人自动地得到用户的角色而无需登录。
定义用户位置。zope能在不同的位置设置用户文件夹,一个zope用户不能访问比它们被定义的所在文件夹更高层的文件夹。你的
用户帐号在哪里定义决定了你能访问什么zope资料。你可以把相关联的对象在一个文件夹中放置在一起,然后在这个文件夹中创
建一个用户文件夹,定义对那些对象的权限。这种安全模式称为授权。通过把zope站点的不同区域授权给不同的用户,你就能
把站点管理的负担转移给一小群管理员。
使用其它类型的用户文件夹
zope能提供不同的验证技术来处理其它类型的用户文件夹,在zope网站中可以找到许多其它类型的用户文件夹。
在www.zope.org/Products/user_mangement中可找到。现在介绍几种常用的类型:
LoginManager 这是一种灵活而强大的用户文件夹,它允许你插入你自已的授权方法,如使用它通过数据库进行验证。
etcUserFolder 使用unix /etc/password风格文件
LDAPAdapter 通过LDAP服务器进行验证
NTUserFolder 通过NT用户帐号进行验证,只有你在windows nt or windows 2000平台下运行zope时才能使用它。
特殊用户帐号
1、匿名用户 它的角色是anonymous,默认只能访问公共资源,并且不能更改任何zope对象。
2、紧急用户 除了能够创建新用户对象外不能创建其它任何新对象。在两种情况下有用,一是创建管理员。二是你因移去许可
而锁在zope外时,你可用紧急用户登录,并确认你的manager账号有view management screens and change permissions许可。
然后退出,用管理员重新登录,这样你就有了修改任何失效部份的权限。紧急用户在access文件中,用zpasswd.py创建紧急用户。
3、初始管理员 在安装完zope系统时创建的,在inituser中。可以zpasswd.py程序管理。# python zpasswd.py inituser。
角色
zope内置有3种角色
Manager管理员 执行管理功能的用户,如创建文件夹和文档。
Anonymous匿名 被授权观看共公资源,不允许更改对象。
Owner所有者 这个角色自动分配给与创建对象有关系的用户。
对于基本的站点,使用管理员和匿名用户已足够了,对于大型复杂的站点,用户可以自定义自已的角色。
定义角色要进入security标签,在屏幕底部的User defined roles字段中输入新角色名并单击add。角色也按对象层次分成上层
和下层。如果你要定义一个适用于整个站点的角色,就要在根目录中创建它。通常角色应该针对站点中的大范围来应用的。如果只是应
用于站点的一部份,你可以定义用户来限制访问。
理解本地角色,当处理某个对象时,用户可以被赋予额外的角色。如果一个对象拥有与某个用户关联的本地角色,当这个用户处理那个
对象时,就得到那些附加的角色。
理解许可,它定义了zope对象能够执行什么操作。就象角色抽象用户一样,许可抽象对象。进入security标签,可以看到给定的对
象存在什么许可。
安全策略获取,可以通过Security标签控制安全策略获取(Acquire permission settings)。它具有继承性,可由父文件夹获取权限。
重要的安全准则,角色和许可结合创建安全策略,并且这些安全策略控制用户的行为。
1、在用户的最高控制层定义用户,除非没有更高层次。
2、在文件夹中应该把组对象放在一起,由相同的人来管理。
3、保持简单。
把控制委派给本地管理员,用角色控制访问位置。
执行安全检查,最普通的安全询问是当前的用户是否拥有给定的许可。例如,假设你的应用程序允许一些用户上载文件。这种操作会受
到“add documents,images,and file”这个标准zope许可的保护。你可以在dtml中查看当前用户是否拥有这些许可。
...
SecurityCheckPermission函数带有2个参数,一个许可名称和一个对象。
假设你想在一个Web页面上显示当前用户名,用以个性化这个页面。通过dtml可以轻松实现。
所有权和可执行内容可以防止特洛伊木马攻击。所有权(ownership)在对象和创建它们的用户之间建立关联。可执行
内容(executable content)是指那些执行用户代码的对象,如脚本、dtml方法和文档。
一个可执行对象只能够执行那些所有者和观看者被授权的行为。这样就能避免无特权用户编写破坏性脚本并然后诱骗一个
权限大的用户执行这个脚本。有时系统想取消这个安全,不管所有者是谁或者以额外的安全形式执行它。代理角色给你提
供了一种调整可执行对象角色的方法。
第七章 变量和高级DTML
设想一个名为zooname的dtml文档,这个文档包含一个HTML表单,如下:
这段代码的功能是,如果存在一个zooname变量,那么页面就打印它。如果不存在,页面显示一个请求输入这个变量的表单,当你单击submit,
你输入的数据使得if求值为真,这段代码应该打印出表单中所输入的内容。但事实并不是这样,这是因为这个DTML文档的名称也被命名为zooname,
DTML没有使用请求(request)变量,它使用了客户对象变量。也就是文档,它自已,造成无限循环。
解决以上错误的方法有2种,1是重命名文档,不要文档名和变量名相同,2是理解名称如果被找到,以及指出名称来自于名名称空间的那里。DTML的
名称空间是以堆栈的形式排列的对象集合。最初是由2个元素开始--客户对象(client object)和请求(request)。客户对象是位于DTML名称
堆栈顶部的第一个对象。客户对象是什么取决于你是否在执行一个DTML方法或一个DTML文档。在前面的例子中客户对象被命名为zooname,这就
是它不能正常运行的原因。我们真正想要的是表单输入来自于WEB的请求,但是客户对象首先被查看。所以上面错误的例子可以改成。
用with标记符表示要在REQUEST名称空间里查找。
DTML客户对象种类多样,它取决于你在执行的是DTML方法还是DTML文档。在文档的情况中,客户对象通常是文档本身。DTML方法能够有不同的
种类的客户对象,这取决于它是如何被调用的。如果你有一个显示所有文件夹内容的DTML方法,那么,客户对象就是正在被显示的文件夹。相同
的方法产生不同的结果。如一个名为list的DTML方法。
如果用http://localhost:8080/aa/list调用,将列出aa文件夹的内容,则客户对象是aa。
如果用http://localhost:8080/bb/list调用,将列出bb文件夹的内容,则客户对象是bb。
DTML请求对象位于名称空间堆栈的底部,包含与当前Web请求相关的信息。它按照以下顺序来查找变量:
1是CGI环境,
2是表单数据,
3是Cookies,
4是其它变量。可在一个页面中输出REQUEST:
修改DTML名称空间,使用in,with,let标记符。
in 当in对一个序列叠代时,它把当前的序列中的数据项推进到名称空间堆栈的顶部。
列出当前文件夹内所有文件名和文件夹名
with 在with块中把指定的对象推进到名称空间的顶部。就象zooname那个例子一样。
let 把一个新的名称空间推到名称空间的顶部。
这将显示
高级DTML标记符
call var标记符调用方法,并返回值,但call调用方法,但不返回值。
comment 使用DTML带注释。
tree 可以构建动态树,以分级的方式显示数据。可用以画站点地图。
return 返回一个任意值。
sendmail 格式化和发送电子邮件信息。
To:
Subject: make a test.
xxx
xxx
mime 允许使用mime来格式化数据。使你能发送带附件的邮件。
unless 与if相反的标记符。
raise/try 处理例外。
第8章 高级zope脚本
现时可用python and perl两种脚本语言。
从web调用脚本可直接打入链接地址。
从DTML中调用脚本。,如果脚本带参数,可以在表达式中传递参数。就像这样:
绑定变量,当一个python脚本被调用时,会创建一套专用变量,这些变量在Bindings视图中被定义。
Context 绑定默认为context,指脚本被调用时的目标对象。
Container 绑定默认为container,指脚本被定义时所在的文件夹。
Script 绑定默认为script,指脚本对象本身。
Namespace 绑定默认为空,这是一个高级变量,如果从DTML中调用脚本,则是前面提到的名称空间。
Subpath 绑定默认为traverse_subpath,高级变量。
安全限制
脚一受到限制,以降低造成破坏的能力。
1、循环限制。脚本不能创建无穷循环。
2、导入限制。脚本不能导入任意的软件包和模块。
3、访问限制。受zope安全策略约束。
4、写入限制。通常,你不能使用脚本更改zope对象属性。
使用外部方法,可以访问文件系统,在Extensions目录中创建和编辑。
第9章 内容搜索和分类
目录(Catalog)是zope内置的搜索引擎,它允许你对各种zope对象进行分类和搜索。可以进行全文搜索,也可以一次搜索多个索引。
第10章 关系数据库连通
要在zope中使用关系数据库,你必须创建两个不同的zope对象,一个是数据库连接对象,一个是Z SQL方法。数据库连接对象告诉zope
如何连接一个关系数据库,Z SQL方法描述对数据库的操作。
在对象添加列表中选中一个数据库连接对象,建立一个数据库连接。在使用数据之前可进地测试,方法是打开数据库连接,
单击“open connection”。在数据库连接的“test”标签中输入以下命令来建立一个表。(这里是基于zope自带的gadfly数据库)
create table test( aa integer, bb varchar )
点击“Submit Query”提交。
使用Z SQL方法例子。
输入记录
insert into test (aa,bb) values
(
, aa bb为Z SQL方法的参数。
)
调用Z SQL方法
动态SQL查询
sqlvar标记符用于插入参数
sqltest进行等式比较 select * from test where ,op是标记符,gt代表大于。
sqlgroup用于创建复杂的查询。可用于把几个条件组成一组。
缓存结果
进入一个SQL方法的Advanced标签。有3个不同的缓存控制。
1、Maximum rows to retrieve 控制每个查询缓存多少数据
2、Maximum results to cache 控制要缓存多少查询。
3、Maximum time(sec) to cache 控制缓存保存时间
第11章 可升级能力和ZEO
为了利用多台计算机来分担负荷,zope公司创建了ZEO(Zope企业对象)。它是一个能在多台计算机中运行你的站点的系统。
这经常被称为簇(clustering)和负载均衡(load balancing)。ZEO保证不同机器上的ZOPE在任何时刻都能完全共享
相同的数据库。它使用c/s架构。在多台机上安装的zope叫ZEO客户机,所有的客户机都连接到一个中央ZEO存储服务器。
第12章 扩展ZOPE
创建ZClass来构建新类型对象,就象一个模板。
第二章 使用zope
zope用户
1、紧急用户 在zope中很少用到,这个帐号用于创建其它用户帐号以及你无意中导致自已被锁无法进入到zope时修复错误。
这只能创建一种类型的对象----用户对象。
2、管理员 相当于超级用户。
3、其它用户 一般用户。
创建用户
管理员可以在一种被称为用户文件夹的特殊类型文件夹中创建zope用户。
第三章 使用基本zope对象
zope对象一般分成三类
1、内容----文档,图像或文本文件,二进制文件等。还可处理关系数据库里的内容。
2、逻辑----python,perl,sql脚本。
3、表现----网页,外观等
可通过ftp,webdav,put远程编辑文档
文件可上载,可通过view标签来查看,如pdf文件。
对象属性
string字符串型 它是任意长度的字符序列,是zope中最常用的属性类型。
int整型 整数,可以是任何正数负数,不能是分数。保证至少32位长。
long长整型 和整数一样,只是没有范围限制。
float浮点型 保存小数
lines行型 属于字符串序列。
tokens标识型 用空格分开的单词序列。
text文本型 象字符串型,区别在于zope规格化行结束符。
selection选择型 用于处理html的选择处理输入框。
multiple selection多选型 用于处理html的多选表单输入框。
对象属性是非常有用的工具,它适合使用少量的数据或信息来标记你的zope对象。
使用方法
zope自带有两种类型的方法:DTML和SQL。在zope2.3以前,DTML方法是zope中通过web编写脚本的唯一方式。2.3后引入了
两种新的脚本对象,python和perl。
获得文件夹对对象列表,所有文件夹都实现objectValues方法。它是ObjectManager接口的一部份。
acl_users
index_html
logo
calculate
interestRateDisplay
dtml_method_test
比较DTML文档和DTML方法
1、如果它是内容,使用DTML文档。
2、如果它是简单逻辑,使用DTML方法。
3、如果意味着要被其他对象呈现出来,使用DTML文档。
4、如果意味着要呈现其它对象,使用DTML方法。
5、如果是一个复杂的行为,请使用基于python or perl的脚本。
使用版本
版本对象帮助协调许多人在同一对象集上进行工作。通过从产品添加列表中选择Version来创建一个版本。给你的版本起一个名字。
按start working in xxxx来起动版本。按Save/Discard来发布修改。按quit working in xxx退出版本控制。
缓存管理器
缓存能改进站点速度,当要运行复杂运算时,只是第一次调用的人花费的时间多一点,后面的人只从缓存中查询,提高了访问速度。
添加一个缓存管理器
zope自带有两个缓存管理器,一个是http加速缓存管理器,它允许你控制一个zope外部的缓存服务器,如squid。它本身不缓存
信息,通过设置特殊的http头信息,告诉外部的缓存服务器缓存什么信息。另一个缓存管理器是RAM缓存管理器,它是一种在你的
计算机内存中缓存内容的zope缓存管理器。缓存一个文档可单击dtml文档的cache视图。把该文档和缓存器关联起来。
虚拟主机对象
zope提供3个对象:SiteRoot、Set Access Rule和Virtual Host Monster。
第4章 使用DTML动态生成内容
DTML是一种服务器端的脚本语言,你可以在两种zope对象中使用该脚本,它们是DTML文档和DTML方法。
standard_html_header和standard_html_footer页面的头尾模板,定义页眉和页脚的内容和样式。
使用python表达式。
var标记符
它把变量插入到DTML方法和文档中。如,var有很多属性,如missing(当找不到变量时用missing
定义的字符串代替),fmt(格式化货币值)。详细内容可查相关资料。
var标记实体句法
&dtml-cockatiel;等同于。使用实体句法的主要原因是为了避免html标
记符中含有dtml标记符。如<">可以用实体句法表
示为
if标记符
对条件求值,执行不同的行为。
there are too many monkeys!
它可嵌套到任何深度。
名称句法检测是否存在一个名称,以及它的值。 xxx ,如果变量不存在,则条件
为假。如果有一个变量,但它为假,这个条件也为假。如果变量不0,None,空序列或空字符串,此时条件为真。
python表达式句法不检测变量是否存在。 xxx ,如果变量不存在,则返回KeyError。
还有else和elif标记符,处理条件选择。
in标记符
它叠代一个对象序列,为每个序列完成一个执行块。在编程中,经常被称为叠代或循环。每次叠代,in标记块中的内容被执行一次。
这个例子遍历一个名为todo_list的对象列表,它为列表中每个数据项插入一段描述该数据项的HTML段落。
叠代显示文件夹内容,隔行换用颜色。
wellcome
第五章 创建基本zope应用程序
使用文件夹来创建应用程序,每个文件夹可以看作一个应用程序,所有程序放在这个文件夹下。
特殊的文件夹对象index_html,就象apache中的index.html。
创建zope动物园web站点
动物园导航 navigation dtml方法。
Return to parent
#设置返回链接,通过if条件判断是否是最顶级,如果是就不出现这个链接。
建立一个standard_html_header,并放入navigation,这样在站点的每一个页面中都可用导航系统。
This is the Document
in the Folder.
下一步,给动物园添加一个首页。建立一个名为index_html的dtml方法。
wellcome to the zope zoo
this is page
用getId获得文件夹名。现在可以在子文件夹内再设置一个index_html以表示子文件夹的默认页面,取代上级目录的index_html。
利用样式表
定义一个style_sheet的DTML文档,设置css。并把它包含在页眉中。
h1 {
font-size:24pt;
font-family:sans-serif;
}
p {
color:#220000;
}
body {
background:#ffffdd;
}
把它加到navigation中
现在所有应用该页眉的页面都有相同的风格。如果网站某个部份需要更换样式信息,只需创建一个新的style_sheet文档并放在这个
文件夹中就可以了。这样那个文件夹和它的子文件夹中的所有页面都使用新的风格。
创建一个文件库
当你上载,修改或删除文件时,zope能动态改变文件链接。创建一个文件夹files,建立一些文件。并建立一个index_html:
file library
以上语句列出files中所有的文件对象(用File对象添加的)。
大多数zope对象有一个bobobase_modification_time方法,它返回对象的最新修改时间。我们可以在index_html中添加它。
file library
还可以添加按文件名或修改时间进行排序的功能,具体代码如下。比较复杂,需好好理解。
file library
File | Last modified |
---|---|
第六章 用户和安全
acl_users用户文件夹包含用户对象,它定义了zope用户帐号。单击add按钮可创建一个新用户。domains字段让你限制用户可
以登录的internet域。如果我只想myjob.com域的人登录,可以把它写到domains内。domains内也可以填IP地址和使用*号
通配符,如123.123.123.*。
如果你指定一个域并且让密码为空,那么来自许可域的任何人自动地得到用户的角色而无需登录。
定义用户位置。zope能在不同的位置设置用户文件夹,一个zope用户不能访问比它们被定义的所在文件夹更高层的文件夹。你的
用户帐号在哪里定义决定了你能访问什么zope资料。你可以把相关联的对象在一个文件夹中放置在一起,然后在这个文件夹中创
建一个用户文件夹,定义对那些对象的权限。这种安全模式称为授权。通过把zope站点的不同区域授权给不同的用户,你就能
把站点管理的负担转移给一小群管理员。
使用其它类型的用户文件夹
zope能提供不同的验证技术来处理其它类型的用户文件夹,在zope网站中可以找到许多其它类型的用户文件夹。
在www.zope.org/Products/user_mangement中可找到。现在介绍几种常用的类型:
LoginManager 这是一种灵活而强大的用户文件夹,它允许你插入你自已的授权方法,如使用它通过数据库进行验证。
etcUserFolder 使用unix /etc/password风格文件
LDAPAdapter 通过LDAP服务器进行验证
NTUserFolder 通过NT用户帐号进行验证,只有你在windows nt or windows 2000平台下运行zope时才能使用它。
特殊用户帐号
1、匿名用户 它的角色是anonymous,默认只能访问公共资源,并且不能更改任何zope对象。
2、紧急用户 除了能够创建新用户对象外不能创建其它任何新对象。在两种情况下有用,一是创建管理员。二是你因移去许可
而锁在zope外时,你可用紧急用户登录,并确认你的manager账号有view management screens and change permissions许可。
然后退出,用管理员重新登录,这样你就有了修改任何失效部份的权限。紧急用户在access文件中,用zpasswd.py创建紧急用户。
3、初始管理员 在安装完zope系统时创建的,在inituser中。可以zpasswd.py程序管理。# python zpasswd.py inituser。
角色
zope内置有3种角色
Manager管理员 执行管理功能的用户,如创建文件夹和文档。
Anonymous匿名 被授权观看共公资源,不允许更改对象。
Owner所有者 这个角色自动分配给与创建对象有关系的用户。
对于基本的站点,使用管理员和匿名用户已足够了,对于大型复杂的站点,用户可以自定义自已的角色。
定义角色要进入security标签,在屏幕底部的User defined roles字段中输入新角色名并单击add。角色也按对象层次分成上层
和下层。如果你要定义一个适用于整个站点的角色,就要在根目录中创建它。通常角色应该针对站点中的大范围来应用的。如果只是应
用于站点的一部份,你可以定义用户来限制访问。
理解本地角色,当处理某个对象时,用户可以被赋予额外的角色。如果一个对象拥有与某个用户关联的本地角色,当这个用户处理那个
对象时,就得到那些附加的角色。
理解许可,它定义了zope对象能够执行什么操作。就象角色抽象用户一样,许可抽象对象。进入security标签,可以看到给定的对
象存在什么许可。
安全策略获取,可以通过Security标签控制安全策略获取(Acquire permission settings)。它具有继承性,可由父文件夹获取权限。
重要的安全准则,角色和许可结合创建安全策略,并且这些安全策略控制用户的行为。
1、在用户的最高控制层定义用户,除非没有更高层次。
2、在文件夹中应该把组对象放在一起,由相同的人来管理。
3、保持简单。
把控制委派给本地管理员,用角色控制访问位置。
执行安全检查,最普通的安全询问是当前的用户是否拥有给定的许可。例如,假设你的应用程序允许一些用户上载文件。这种操作会受
到“add documents,images,and file”这个标准zope许可的保护。你可以在dtml中查看当前用户是否拥有这些许可。
...
SecurityCheckPermission函数带有2个参数,一个许可名称和一个对象。
假设你想在一个Web页面上显示当前用户名,用以个性化这个页面。通过dtml可以轻松实现。
所有权和可执行内容可以防止特洛伊木马攻击。所有权(ownership)在对象和创建它们的用户之间建立关联。可执行
内容(executable content)是指那些执行用户代码的对象,如脚本、dtml方法和文档。
一个可执行对象只能够执行那些所有者和观看者被授权的行为。这样就能避免无特权用户编写破坏性脚本并然后诱骗一个
权限大的用户执行这个脚本。有时系统想取消这个安全,不管所有者是谁或者以额外的安全形式执行它。代理角色给你提
供了一种调整可执行对象角色的方法。
第七章 变量和高级DTML
设想一个名为zooname的dtml文档,这个文档包含一个HTML表单,如下:
这段代码的功能是,如果存在一个zooname变量,那么页面就打印它。如果不存在,页面显示一个请求输入这个变量的表单,当你单击submit,
你输入的数据使得if求值为真,这段代码应该打印出表单中所输入的内容。但事实并不是这样,这是因为这个DTML文档的名称也被命名为zooname,
DTML没有使用请求(request)变量,它使用了客户对象变量。也就是文档,它自已,造成无限循环。
解决以上错误的方法有2种,1是重命名文档,不要文档名和变量名相同,2是理解名称如果被找到,以及指出名称来自于名名称空间的那里。DTML的
名称空间是以堆栈的形式排列的对象集合。最初是由2个元素开始--客户对象(client object)和请求(request)。客户对象是位于DTML名称
堆栈顶部的第一个对象。客户对象是什么取决于你是否在执行一个DTML方法或一个DTML文档。在前面的例子中客户对象被命名为zooname,这就
是它不能正常运行的原因。我们真正想要的是表单输入来自于WEB的请求,但是客户对象首先被查看。所以上面错误的例子可以改成。
用with标记符表示要在REQUEST名称空间里查找。
DTML客户对象种类多样,它取决于你在执行的是DTML方法还是DTML文档。在文档的情况中,客户对象通常是文档本身。DTML方法能够有不同的
种类的客户对象,这取决于它是如何被调用的。如果你有一个显示所有文件夹内容的DTML方法,那么,客户对象就是正在被显示的文件夹。相同
的方法产生不同的结果。如一个名为list的DTML方法。
如果用http://localhost:8080/aa/list调用,将列出aa文件夹的内容,则客户对象是aa。
如果用http://localhost:8080/bb/list调用,将列出bb文件夹的内容,则客户对象是bb。
DTML请求对象位于名称空间堆栈的底部,包含与当前Web请求相关的信息。它按照以下顺序来查找变量:
1是CGI环境,
2是表单数据,
3是Cookies,
4是其它变量。可在一个页面中输出REQUEST:
修改DTML名称空间,使用in,with,let标记符。
in 当in对一个序列叠代时,它把当前的序列中的数据项推进到名称空间堆栈的顶部。
列出当前文件夹内所有文件名和文件夹名
with 在with块中把指定的对象推进到名称空间的顶部。就象zooname那个例子一样。
let 把一个新的名称空间推到名称空间的顶部。
's your .
这将显示
bob's your uncle
高级DTML标记符
call var标记符调用方法,并返回值,但call调用方法,但不返回值。
comment 使用DTML带注释。
tree 可以构建动态树,以分级的方式显示数据。可用以画站点地图。
return 返回一个任意值。
sendmail 格式化和发送电子邮件信息。
To:
Subject: make a test.
xxx
xxx
mime 允许使用mime来格式化数据。使你能发送带附件的邮件。
unless 与if相反的标记符。
raise/try 处理例外。
第8章 高级zope脚本
现时可用python and perl两种脚本语言。
从web调用脚本可直接打入链接地址。
从DTML中调用脚本。,如果脚本带参数,可以在表达式中传递参数。就像这样:
绑定变量,当一个python脚本被调用时,会创建一套专用变量,这些变量在Bindings视图中被定义。
Context 绑定默认为context,指脚本被调用时的目标对象。
Container 绑定默认为container,指脚本被定义时所在的文件夹。
Script 绑定默认为script,指脚本对象本身。
Namespace 绑定默认为空,这是一个高级变量,如果从DTML中调用脚本,则是前面提到的名称空间。
Subpath 绑定默认为traverse_subpath,高级变量。
安全限制
脚一受到限制,以降低造成破坏的能力。
1、循环限制。脚本不能创建无穷循环。
2、导入限制。脚本不能导入任意的软件包和模块。
3、访问限制。受zope安全策略约束。
4、写入限制。通常,你不能使用脚本更改zope对象属性。
使用外部方法,可以访问文件系统,在Extensions目录中创建和编辑。
第9章 内容搜索和分类
目录(Catalog)是zope内置的搜索引擎,它允许你对各种zope对象进行分类和搜索。可以进行全文搜索,也可以一次搜索多个索引。
第10章 关系数据库连通
要在zope中使用关系数据库,你必须创建两个不同的zope对象,一个是数据库连接对象,一个是Z SQL方法。数据库连接对象告诉zope
如何连接一个关系数据库,Z SQL方法描述对数据库的操作。
在对象添加列表中选中一个数据库连接对象,建立一个数据库连接。在使用数据之前可进地测试,方法是打开数据库连接,
单击“open connection”。在数据库连接的“test”标签中输入以下命令来建立一个表。(这里是基于zope自带的gadfly数据库)
create table test( aa integer, bb varchar )
点击“Submit Query”提交。
使用Z SQL方法例子。
输入记录
insert into test (aa,bb) values
(
, aa bb为Z SQL方法的参数。
)
调用Z SQL方法
list_all_test为显示所有test表的Z SQL方法。in标记用于叠代每个由list_all_test返回的结果对象。- :
动态SQL查询
sqlvar标记符用于插入参数
sqltest进行等式比较 select * from test where ,op是标记符,gt代表大于。
sqlgroup用于创建复杂的查询。可用于把几个条件组成一组。
缓存结果
进入一个SQL方法的Advanced标签。有3个不同的缓存控制。
1、Maximum rows to retrieve 控制每个查询缓存多少数据
2、Maximum results to cache 控制要缓存多少查询。
3、Maximum time(sec) to cache 控制缓存保存时间
第11章 可升级能力和ZEO
为了利用多台计算机来分担负荷,zope公司创建了ZEO(Zope企业对象)。它是一个能在多台计算机中运行你的站点的系统。
这经常被称为簇(clustering)和负载均衡(load balancing)。ZEO保证不同机器上的ZOPE在任何时刻都能完全共享
相同的数据库。它使用c/s架构。在多台机上安装的zope叫ZEO客户机,所有的客户机都连接到一个中央ZEO存储服务器。
第12章 扩展ZOPE
创建ZClass来构建新类型对象,就象一个模板。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9534332/viewspace-351749/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9534332/viewspace-351749/