
[separator]
这个参考主要描述了最常用的Zope对象接口。适用于编写DTML、Perl和Python脚本,从而创建和操纵Zope对象。
这个模块中的函数和类适用于基于Python的脚本和页面模板。
SecurityManager?提供检查权限的方法。
返回一个布尔变量,表示是否通过可执行对象进行调用。
验证权限
参数:
检查指定的对象是否具有指定的许可。
取得当前已授权用户。参见AuthenticatedUser 类。
常用的验证数值函数
这个接口需要由用户验证后返回的对象来提供支持,这个接口用于访问控制。
返回用户名称
取得用户的ID。ID可以用于通过Python从用户的UserDatabase中得到用户。
如果用户具有roles列表中的值,至少要有一个,则返回真。object是可选的环境对象。
返回用户角色的列表。
如果用户在object对象上有permission许可,则返回真。
返回分配用户的角色列表,包含在object对象环境中分配的本地角色。
返回用户的域限制列表。
DTML文档是包含和执行DTML代码的Zope对象。它用于显示Web页面。
更改DTML文档,用data替换内容,用title更改标题。 data参数可以是一个文件对象或一个字符串。
返回DTML文档的源文本。
调用DTML文档,执行文档中所包含的DTML代码。这个方法返回对象执行的结果。
在这个过程中,DTML文档经常需要把各种名称解析成对象。例如,当执行代码 <dtml-var spam> 时,DTML引擎试图解析名称spam。
要解析名称,必须给文档传递一个名称空间,在这个名称空间里查找这些名称。这个过程可以通过以下几种方式完成:
除了在指定的client里查找名称,DTML文档本身可以作为一个client参数来传递它自己,因此还可以在DTML文档本身里查找名称。
通过名称空间给DTML文档传递参数也可以是认为是给文档提供关联环境。
DTML文档可以通过三种方式调用。
通过DTML
DTML文档可以通过另外一个DTML方法或文档来调用:
<dtml-var standard_html_header> <dtml-var aDTMLDocument> <dtml-var standard_html_footer>
在这个例子里,文档aDTMLDocument 是通过另外一个DTML对象采用名称的方式来调用的。调用方法传递的client参数值为this,REQUEST参数为当前的DTML名称空间。前边的代码等同于以下DTML里的Python表达式中的用法:
<dtml-var standard_html_header> <dtml-var "aDTMLDocument(_.None, _)"> <dtml-var standard_html_footer>
通过Python
产品、外部方法和脚本可以采用相同的方式调用DTML文档,就像它们在DTML里通过一个Python表达式调用DTML文档那样(如前边的例子所示)。
通过公布者(By the Publisher)
当通过URL调用一个DTML文档时,DTML文档通过公布者调用。REQUEST对象作为第二个参数传递给文档。
返回DTML文档的源文本的大小,单位是字节。
给当前的ObjectManager添加一个DTML 文本。
DTML方法是包含和执行DTML代码对象。它可以作为一个模板来显示其它对象。它还可以存储一小段内容,这些内容可以被插入到其它的DTML文档或DTML方法里。
DTML方法的id 通过document_id变量提供,title通过document_title变量提供。
用于更改DTML方法,用data替换内容,更改title。data参数可以是一个文件对象或字符串。
返回DTML方法的源文本。
调用DTML方法,执行其中的DTML代码。这个方法返回对象执行的结果。
在这个过程中,DTML方法经常需要把各种名称解析成对象。例如,当执行代码 <dtml-var spam> 时,DTML引擎试图解析名称spam。
要解析名称,必须给文档传递一个名称空间,在这个名称空间里查找这些名称。这个过程可以通过以下几种方式完成:
不同于DTML文档,DTML方法不在它们自己的实例字典里查找名称。
通过名称空间给DTML文档传递参数也可以是认为是给文档提供关联环境。
DTML文档可以通过三种方式调用。
通过DTML
DTML方法可以通过另外一个DTML方法或文档来调用:
<dtml-var standard_html_header> <dtml-var aDTMLMethod> <dtml-var standard_html_footer>
在这个例子里,方法aDTMLMethod是通过另外一个DTML对象采用名称的方式来调用的。调用方法传递的client参数值为this,REQUEST参数为当前的DTML名称空间。前边的代码等同于以下DTML 里的Python表达式中的用法:
<dtml-var standard_html_header> <dtml-var "aDTMLMethod(_.None, _)"> <dtml-var standard_html_footer>
通过Python
产品、外部方法和脚本可以采用相同的方式调用DTML方法,就像它们在DTML里通过一个Python表达式调用DTML方法那样(如图前边的例子所示)。
通过公布者(By the Publisher)
当通过URL调用一个DTML方法时,DTML文档通过公布者调用。REQUEST对象作为第二个参数传递给文档。
返回DTML方法的源文本的大小,单位是字节。
给当前的ObjectManager添加一个DTML 文本。
DateTime?对象提供处理日期和时间的接口。DateTime还提供了日历操作方法、日期和时间算法和格式化方法。
DateTime?对象可以表示当前事件,并且提供显示接口,不影响对象绝对值。
DateTime?对象可以通过形式多样的字符串或数值来创建,或者通过其它DateTime对象计算得到。DateTime可以把时间的格式转换成不同时区的格式,还可以在一个按照给定时区创建DateTime对象。
DateTime?对象支持数值计算:
DateTime?对象应该认为是不变的,所有转换和数值操作返回一个新的DateTime对象而不是修改当前的对象。
DateTime?对象总是按照绝对UTC时间维护数值,根据时区以及参数来提供数值。DateTime对象方法基于时区返回相应的值。
注意如果没有指定时区,默认使用本地时区来表示时间。
创建DateTime对象可使用0到7个参数。
e=DateTime?("US/Eastern") # returns current date/time, represented in US/Eastern.
x=DateTime?("1997/3/9 1:45pm") # returns specified time, represented in local machine zone.
y=DateTime?("Mar 9, 1997 13:45:00") # y is equal to x
日期部分由年、月和日的值组成。年的值必须为1位、2位或4位数的整数。如果使用1位或2位数,年被假设属于20世纪。月可以是一个整数,从1到12,也 可以是月的名称或月的缩写,其中一个句点可以选择性的跟随在缩写后。日必须属于从1到该月的天数之间的整数。年、月和日的值可以用句点、连字号、右箭号或 空格分隔。在分隔符周围允许使用额外的空格。年、月和日的值可以按照任何顺序给定,只要能够区分出组件。如果所有这三个组件都是小于13的数字,那么假定 的顺序为月-日-年。
time部分由小时、分钟和秒的值组成,用冒号分隔。小时的值必须是一个0至23(包含0和23)之间的整数,分钟的值必须为0至59(包含0和59)之 间的整数。秒的值可以为0至59.999(包含0和59.999)之间的整数。秒的值,或者分钟和秒的值,可以忽略。时间可以跟随大写或小写格式的am 或 pm,其被假定为12小时制。
import time
t=time.time()
now_east=DateTime(t,'US/Eastern')
# Time t represented as US/Eastern
now_west=DateTime(t,'US/Pacific')
# Time t represented as US/Pacific
# now_east == now_west
# only their representations are different
模块函数Timezones()返回一个DateTime模块可识别的时区列表。时区名称识别是不区分大小写的。
返回按照format格式提供的日期时间字符串。
参见 Python中的 time.strftime 函数。
返回用整数表示的星期中的天数,星期日是0。
返回按照“Mar 1, 1997 1:45 pm”格式表示的日期时间字符串。
返回12小时制的小时数。
兼容:见pMonth。
按照符合HTML 4.0规范的格式返回对象,这个规范是ISO8601标准之一。
参见 HTML 4.0 规范
日期输出格式为:YYYY-MM-DDTHH:MM:SSZ T,其中Z是文本字符。时间为UTC(通用协调时间)时间。
和其它DateTime对象或浮点数比较DateTime对象,比如由Python 的time 模块返回的数值。如果对象表示一个大于或等于指定的DateTime或time 模块风格的时间的日期或时间对象,则返回真。通过比较长整数型的毫秒,它可以给出更为精确的结果。
返回按照对象所在时区表示的年的天数。
与其它的DateTime对象或一个浮点数比较DateTime对象,比如由Pythontime 模块返回的数字。如果对象表示一个小于指定的DateTime或time 模块风格的时间的日期或时间对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
返回一个对象的最接近秒的时间字符串。
如果这个对象在所在时区中表示一个属于当前小时范围里的日期或时间对象,则返回真。
返回完整的月份的名称。
以两位数字符形式返回月份。
返回适当的时间修饰语(am或pm)。
返回以24小时制表示的小时。
返回以"Mar 1, 1997 1:45 pm US/Eastern"格式表示对象值的字符串。
兼容:见pDay。
返回以"Mar. 1, 1997 1:45 pm"格式表示的对象值的字符串。
返回分钟。
返回以整数表示的天。
返回一个新的表示最早时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天。
返回对象的日期字符串。
返回对象的最接近秒的时间字符串。
如果这个对象表示一个晚于调用时间的时间日期对象,则返回真。
和其它的DateTime对象或一个浮点数比较DateTime对象,比如和由Pythontime 模块返回的数字比较。如果对象表示一个大于指定的DateTime或符合time 模块风格的时间的date/time对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
返回对象的时间字符串,不显示秒。
返回以两位数字符表示的日历年。
如果对象在所在时区中表示一个属于当前天范围内的日期时间对象,则返回真。
返回以两位数字符形式表示的天。
返回以RFC 822格式显示的日期。
如果当前年(在对象所属时区中)是闰年则返回真
返回一个以"March 1, 1997 1:45 pm"格式表示的对象值的字符串。
如果对象表示一个早于调用时间的日期时间对象,则返回真。
返回一个以"March 1, 1997 1:45 pm"格式表示的对象值的字符串。
返回UTC中按照Python time模块所使用的格式以浮点数形式表示的日期时间。注意,采用那些拥有对于time模块来说没有含义的值的DateTime来创建日期或时间是可能的。
返回当前对象在指定的z时区中的DateTime 。
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个小于或等于指定的DateTime或time模块风格的时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
兼容:参见aMonth。
返回包含对象的日历年、月、日、小时、分钟、秒和时区值的元组。
如果这个对象在所属时区中表示一个属于当前年范围以内的日期时间对象,则返回真。
返回对象的时间字符串。
返回对象的时间字符串,不显示秒。
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个等于指定的DateTime或time模块风格时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
返回星期的简短名称(带有句点)。
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个不等于指定的DateTime或time模块风格时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
返回24小时制的小时。
返回以"Mar. 1, 1997 1:45 pm US/Eastern"格式表示的对象值的字符串。
如果对象在所属的时区中表示一个属于当前月范围以内的日期时间对象,则返回真。
兼容:参见aDay。
返回一个新的表示最迟时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天。
返回以整数表示的星期的天数,星期日为1。
返回对象的所属时区。
返回对象的日历年。
返回对象的时间字符串。
按照ISO标准格式返回对象。
输出格式为:YYYY-MM-DD HH:MM:SS
返回自从GMT新纪元以来的毫秒数。
返回秒
返回以整数表示的对象的月份。
返回简写(带有句点)的月份名称。
返回简写的月份名称。
如果对象在所属时区中表示一个属于当前分钟范围以内的日期时间对象,则返回真。
返回星期中天的完整名称。
返回星期中天的简写名称。
Web可调用函数,用于封装外部Python函数。
函数在一个外部文件里定义。可以把这个文件看成是模块,但是它不是一个模块。它不是直接导入,而是读入和求值。这个文件必须位于Zope安装目录中的Extensions子目录里,或者在一个产品目录的Extensions子目录里。
由于外部方法装载的方式,不能导入位于Extensions目录中的Python模块。可以导入那些在Zope安装目录中的lib/python目录里提供的模块,或者是导入那些位于lib/python目录中的软件包里的模块。
用于更改外部方法(External Method)
参见manage_addExternalMethod中的参数模块和函数的描述。
注意,调用manage_edit会引起重新载入模块。这对于在调试期间查看更改的效果来说是有用的,但是对于那些依赖共享的全局数据的函数来说,它会导致问题。
调用外部方法。
调用外部方法大致等同于用Python调用原始函数。位置和关键字参数像通常那样传递。注意,它不象通常的Python方法那样,self参数必须明确传递。不符合这个原则的情况是:
添加一个外部方法对象。
除了标准的用于创建对象的参数id 和 title外,还定义了以下的参数:
例如,如果模块是ACMEWidgets.foo,那么就先尝试使用文件lib/python/Products/ACMEWidgets?/Extensions/foo.py。如果失败了,那么就使用文件Extensions/ACMEWidgets?.foo.py
File是一种包含文件内容的Zope对象。个文件对象可以用来上载或下载文件信息。
在Zope里使用文件对象很容易。最常见的用法是在一个Web页面里显示一个文件对象的内容,比如使用DTML:
<dtml-var standard_html_header>一个更为复杂的例子是用来给用户显示可以下载的文件对象。为了让用户能够下载文件,下一个例子显示了文件夹里的每个文件对象的链接:
<dtml-var FileObject>
<dtml-var standard_html_footer>
<dtml-var standard_html_header>在这个例子里,通过absolute_url方法和id创建当前ObjectManager中的所有文件对象的HTML超级链接列表。
<ul>
<dtml-in "ObjectValues('File')">
<li><a href="<dtml-var absolute_url>"><dtml-var
id></a></li>
</dtml-in>
</ul>
<dtml-var standard_html_footer>
参见ObjectManager的objectValues方法。
返回文件内容类型。
用data更新文件的内容。
data参数必须为一个字符串。如果没有提供content_type,那么就不设置内容类型。如果没有提供size,那么文件的大小就根据data进行计算。
返回文件大小,单位为字节。
添加一个新文件对象。 采用file文件内容创建一个新文件对象。
Folder是一种通用容器对象。
文件夹是Zope里最常见的ObjectManager子类。
给当前的ObjectManager添加一个文件夹。
Image是一种包含图像内容的Zope对象。Image对象可用来上载或下载图像信息。
图像对象有两个定义大小的属性,height 和 width 。图像上载时,计算出这两个属性。对于Zope不能识别的图像类型,这些属性可能无法定义。
在Zope里使用Image对象很容易。最常见的用法是在Web页面里显示Image对象的内容。通过DTML引用这个对象就可以实现:
<dtml-var standard_html_header>它生成一个HTML IMG标记符,引用图像的URL。它等同于:
<dtml-var ImageObject>
<dtml-var standard_html_footer>
<dtml-var standard_html_header>你可以使用标记符方法更为精确的控制图像的显示方式。例如:
<dtml-with ImageObject>
<img src="<dtml-var absolute_url>">
</dtml-with>
<dtml-var standard_html_footer>
<dtml-var "ImageObject.tag(border='5', align='left')">
这个方法返回一个包含HTML IMG标记符的字符串,它引用图像。
根据你的需要,可以选择提供height、width、alt、scale、xscale 和 yscale参数,这些参数转换成HTML IMG标记符的属性。注意,默认提供height 和 width,并且alt取自title_or_id方法。
可以通过提供关键字参数来支持其它的或未来的IMG标记符属性。例外情况是HTML风格样式单标记符class。因为单词class是Python中的保留字,你必须代之以使用关键字参数css_class。这样就在处理img标记符时转换成一个class HTML标记符。
添加一个新Image对象。
用file文件内容创建一个新Image对象。
MailHost?(邮件主机)对象可作为简单邮件传输协议(SMTP)服务器的适配器。MailHost用来通过DTML sendmail 标记符查找合适的发送邮件的主机。
发送电子邮件消息,messageText是rfc822格式。可设置编码。 参数为:
发送电子邮件消息。参数为:
给一个ObjectManager添加一个MailHost对象。
=ObjectManager? 模块==
ObjectManager?用于包含其它的Zope对象。被包含的对象是Object Manager Items 。
要在ObjectManager内部创建一个对象,需要使用'manage_addProduct':
self.manage_addProduct['OFSP'].manage_addFolder(id, title)
使用DTML,则为:
<dtml-call "manage_addProduct['OFSP'].manage_addFolder(id, title)">这个例子在当前的ObjectManager内部创建一个新文件夹。
manage_addProduct是一个映射,它提供对对产品构造器方法的访问。它根据id搜索对象。
构造器方法在产品初始化期间注册,并且对于每个可以添加的对象在API文档里都应该有注解。
这个方法返回(id,object)元组序列。
就像objectValues 和 objectIds,它接受一个参数,可以是为字符串,也可以是一个列表,从而只列出属于一个或多个meta_type的对象。
每个元组的第一个元素是包含在ObjectManager中的对象的id,第二个元素是对象本身。
例子:
<dtml-in objectItems>
id: <dtml-var sequence-key>,
type: <dtml-var meta_type>
<dtml-else>
There are no sub-objects.
</dtml-in>
这个方法返回一个包含在ObjectManager和所有它的双亲ObjectManager里的给定meta_type的对象列表。
type参数指定meta_type。它可以是一个字符串,从而指定一个meta_type,或者它可以是一个字符串列表,用来指定多个meta_type。
这个方法返回一个对象序列。
就像objectItems 和 objectIds,它接受一个参数,或者为字符串,或者为一个列表,从而只列出属于一个或多个meta_type的对象。
例子:
<dtml-in expr="objectValues('Folder')">
<dtml-var icon>
This is the icon for the: <dtml-var id> Folder<br>.
<dtml-else>
There are no Folders.
</dtml-in>
通过给objectValues方法传递一个meta_type可限制文件夹的返回的结果。
这个方法返回一个对象id列表。
你可以传递一个参数,从而指定用什么对象meta_types来限制要生成的结果。这个参数可以是一个字符串,指定一个meta_type,或者它可以是一个字符串列表,用以指定多个meta_type。
例子:
<dtml-in objectIds>这段DTML代码显示所有包含在当前ObjectManager里的对象的id 。
<dtml-var sequence-item>
<dtml-else>
There are no sub-objects.
</dtml-in>
Zope对象可以包含在ObjectManager里。几乎所有的可以通过Web管理的Zope对象都是ObjectManagerItem 。
ObjectManagerItem?有这些实例属性:
如果title不为空,它返回标题;否则,它返回id。
返回顶级Zope应用程序对象。
当用户在ObjectManager的Contents视图或在Zope管理导航视图中选择一个数据项时调用这个Web方法。
从根取得对象的路径,忽略虚拟主机。
返回通过对象的给定path路径所获得的对象,方法在这些对象上调用。这个方法“不受限制”,这是因为几乎没有执行安全检查。
如果对象没有找到,那么返回默认的参数。
返回对象的id。
id是对象在它所属ObjectManager中的唯一名称。它应该为一个字符串,它可以包含字母、数字、下划线、箭号、逗号和空格。
返回对象的绝对URL。
如果提供的relative参数为true,那么返回的URL相对于站点对象。注意,如果使用虚拟主机,那么返回的路径是一个逻辑路径而不是一个物理路径。
返回对象。
它在两种情况中使用。第一,它提供一种在DTML表达式里指向一个对象的方式。
它的第二个用法是有点深奥。它提供了一种获取对象的方式,而不用从它被获取的地方得到完整的关联。这很有用,例如,使用一个方法,这个方法属于一个数据项方法的非数据项子对象,你需要得到子对象的关联环境外的数据项。
返回通过给定path路径所获得的对象,在这个过程中总是执行安全检查。
如果一个对象没有找到,那么返回默认的参数。
如果title不为空,它返回title,其后为用括号扩起来的id。否则,它返回id。
属性管理器用于管理对象的属性。属性可以通过Web或DTML管理。
除了拥有类型,属性可以为可写或只读,并且可有默认值。
返回(id,property)元组列表。
返回属性值列表。
返回一个映射元组,显示属性元数据,元数据包括id、 type 和 mode。
返回属性id的列表。
取得属性id的类型。如果此属性不存在它返回None。
返回属性id的值。如果属性没有找到,返回可选的第二个参数或返回None。
如果PropertyManager有属性id,则返回真。否则,它返回假。
PropertySheet?用来组织和处理相关属性集。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet可以提供或不提供管理属性的Web界面。
返回一个名称空间字符串,对于这个属性集它可以被用作一个xml名称空间。如果对于一个给定属性单(特别是添加在ZClass定义里的属性单)没有默认的名称空间,它可以是一个空字符串。
返回一个(id, property)元组列表。
返回一个实际属性值的列表。
取得属性id的类型。如果此属性不存在则返回None。
返回一个包含属性元数据的映射。
取得属性id,如果此属性没有找到,返回可选的第二个参数或None。
按照给定的id删除一个或多个属性。id参数应该为一个包含要被删除的属性id的(元组或列表)序列。如果id为空,不进行操作。如果任何在id中指定的属性不存在,引发一个错误。
一些对象有指定的属性,它们由作者定义,不能被删除。如果这些属性之一在id中被指定,返回一个HTML错误消息。
如果没有为REQUEST传递数值,该方法返回None。如果为REQUEST提供一个值(就像它通过Web被调用一样),显示对象的属性管理表单。
这个方法可以通过Web使用DTML或Python代码来调用。
修改现有对象的属性,方式是通过REQUEST、包含name:value对或者传递name=value关键字参数传递一个映射对象。
一些对象拥有特殊的属性,这些属性由产品作者定义,因此不能更改。如果你视图通过这个方法更改这些属性,就会引发一个错误。
注意,当调用这个方法时,不进行类型检查或转换,因此要确保被更新的值属于正确的类型。如果为REQUEST提供了一个值(就像它通过Web调用时那样),这个方法返回一个HTML消息对话框。如果没有传递REQUEST,这个方法成功时返回None。
这个方法可以通过Web使用DTML或Python代码来调用。
用给定的id、value 和 type添加一个新属性。
这些属性类型是:
对selection 型和 multiple selection型属性所赋予的值可以是一个特征或方法名称。属性或方法必须返回一个序列值。
如果给定的type不能识别,对象只是存储给定的value和type。
如果没有为REQUEST传递值,这个方法返回None。如果为REQUEST提供一个值(就像通过Web调用一样),那么显示对象的属性管理表单。
这个方法可以通过Web使用DTML或Python代码来调用。
返回一个映射元组,为属性提供元数据。
返回属性id的列表。
如果含有给定id的属性,则返回真;否则,它返回假。
PropertySheet?用于组织和处理相关属性集。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet对象通过PropertySheets对象访问,它充当一个PropertySheet实例集合。
支持属性单的对象(支持PropertyManager接口或者ZClass对象的对象)有一个PropertySheets属性(一个 PropertySheets实例),它是PropertySheet对象的集合。PropertySheets对象提供一个接口,就像一个Python 映射,因此单独的PropertySheet对象就可以通过字典风格的键索引来访问。
返回按照name区分的PropertySheet,或者,如果指定的PropertySheet没有找到,则返回默认给定的值。
返回一个包含集合里所有PropertySheet对象的序列
返回一个序列,它包含每个PropertySheet对象的(id, object)元组。
Python脚本包含Python代码,它通过以下方式执行:
返回源文本,并且把RESPONSE的内容类型设置为text/plain。
更改脚本的参数和正文。这个方法接受两个参数:
更改脚本的标题。这个方法接受一个title参数,它是脚本标题的新值,并且必须为字符串。
把文件里的文本传递给write方法。
通过把文本参数分解成组块来更改脚本。前边带有##符号的行将被删去,如果这些行符合##name=value格式,就用来设置元数据,例如标题和参数。剩下的文本是Python脚本的正文。
返回一个测试脚本所必需的参数的列表。
返回Python脚本的正文,前面放置一个特殊的注释块。这个块含有元数据,这些元数据按照write方法所希望的那样以注释行的形式提供。
更改脚本的主要参数。这个方法接受以下参数:
给文件夹中添加Python脚本。
request(请求)对象封装所有与当前请求有关的信息。这包括输入报头、表单数据、服务器数据和cookies。
request对象是一种映射对象,表示了一个变量与值的映射集合。变量分成五个类别:
1 Environment variables(环境变量)
这些变量包括输入报头、服务器数据和其它与请求有关的数据。变量名称符合CGI规范。
2 Form data(表单数据)
这些数据是从被编码的URL查询字符串或正文表单中提取的数据。
3 Cookies
这些数据是cookie数据。
4 Lazy Data(松散数据)
这些数据直到直接引用才能引用,调用时的结果是以“其它”数据存储的结果,也就是通常的请求数据。 这样,它们是“松散”的数据,比如SESSION对象。 松散数据只能通过Python方法set_lazy(name,callable)在request中设定。这个方法不能通过DTML或Web调用。
5 Other(其它) 这些数据是可以由应用程序对象设置的数据。
request 对象可以像映射对象那样使用,其中,值按照以下顺序查找:环境变量,其它变量,表单数据,cookies。
以下是在REQUEST里设置的特殊变量:
返回指定的HTTP报头,或者返回可选的默认参数,或者如果报头未找到返回None。注意起始不带HTTP_的原始报头名称和CGI报头名称都可以识别。例如,Content-Type,CONTENT_TYPE 和 HTTP_CONTENT_TYPE都将返回Content-Type报头。
根据REQUEST对象里的所有键,返回一个(key, value)元组序列。
返回REQUEST对象里所有键被排序后形成的序列。
改变URL、URLn、URLPATHn、BASEn、BASEPATHn和absolute_url(),这样当前的对象拥有路径path。如果hard为真,那么PARENTS被清空。
它提供了虚拟主机支持。它可以通过URL来调用。
针对REQUEST对象里的所有键返回一个键值序列。
在REQUEST对象里创建一个新名称并给它分配一个值。这个名称和值存储在Other类别里。
如果REQUEST对象包含key,则返回真,否则返回假。
设置被指定的SERVER_URL元素,它还影响URL、URLn、BASEn 和 absolute_url()。 它提供虚拟主机支持。
Response对象表示对一个Zope请求所做出的响应。
设定一个HTTP返回的报头,让其中的name的值为value,如果已经存在了,则清除此报头以前设定的值。如果文字标记为真,那么报头名称的大小写被保留,否则,在输出中对报头名称进行单词大写处理。
在浏览器上设置一个HTTP cookie。
响应包括一个HTTP报头,这个报头在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。这会用Response对象里的cookie值覆盖任何以前设定的值。
使用给定的值设置一个新HTTP返回报头,同时保持以前相同名称的报头不变。
给cookie附加一个值。
用value值设置HTTP返回报头中的name,如果这个报头存在一个以前设置的值,那么它被附加在后边,用逗号隔开。
以流的形式返回dada。
HTML数据可以通过使用一种面向流的接口返回。这使得浏览器在处理响应计算的同时显示部分结果。
已公布对象首先应该通过响应对象设置输出报头或cookies。
注意,已公布对象在开始面向流输出后必须不生成任何错误。
设置相应的HTTP状态响应代码;参数可以是一个整数或者是以下字符串之一:
OK、Created、Accepted、NoContent、MovedPermanently、 MovedTemporarily?、NotModified、BadRequest、Unauthorized、Forbidden、NotFound、InternalError、NotImplemented、BadGateway 、 ServiceUnavailable?。
这些字符串会转换成相应的整数值。
给返回的文档设置base URL。
让浏览器删除一个HTTP cookie。
响应中HTTP报头如果已经存在一个cookie,将删除客户端中名称为name的cookie。完成的方式是通过发送一个包含有终止日期的新 cookie。注意,一些客户端需要指定一个路径,这个路径必须完全符合创建cookie时所给定的路径。这个路径可以通过关键字参数来指定。
返回一个HTTP报头,它在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。如果cookie的值以前已经在Response对象里设置过了,那么新的值被附加在旧的后边,用一个冒号分隔。
引起一个重定向而不引发错误。如果lock关键字参数传递一个真值,那么HTTP重定向响应代码不变,即使以后在处理请求的过程中发生了一个错误(当redirect()已经被调用以后)。
提供通用的脚本支持
Web可调用的基于脚本的接口
使用由字典argvars提供的测试参数。它用给定的参数调用当前的脚本并返回结果。
参见
Transient Object API
在session数据管理者对象在操作中引发的错误。
例外可以在PythonScript中捕捉。导入的方式如下:
from Products.Sessions import SessionDataManagerErr
Zope Browser Id Manager 接口
一个Browser Id Manager负责给站点访问者分配id,用于给来自于相应的Session Data Manager的请求提供服务。
如果create=0,则返回当前浏览器id,或如果当前请求没有关联浏览器id,则返回None。如果create=1,则返回当前的浏览器id,或如 果当前请求没有关联浏览器id,则创建一个新的浏览器id。常和getBrowserIdName一起使用,这样可方便的把browser-id- name和browser-id嵌入到form表单中。浏览器id是唯一的,它的长度、类型和组成可以更改。
所需许可: Access contents information
引发: 如果在REQUEST中发现不符合格式要求的id则引发BrowserIdManagerErr。
如果浏览器id来自于cookie则返回真。
所需许可: Access contents information
引发: 如果不存在当前的浏览器id则引发BrowserIdManagerErr。
如果浏览器id是新的则返回真。当浏览器id第一次创建并且没有在任何请求中返回给服务器时,浏览器id是新的。
所需许可: Access contents information
引发: BrowserIdManagerErr?,条件是不存在当前的浏览器id。
用当前请求的浏览器id对url进行编码处理,并返回结果。例如:encodeUrl(http://foo.com/amethod)可以返回http://foo.com/amethod?_ZopeId=as9dfu0adfu0ad。
所需许可: Access contents information
引发: BrowserIdManagerErr?. 条件是不存在当前浏览器id。
从客户端浏览器删除cookie,条件是当且仅当使用了cookie浏览器id名称空间。
所需许可: Access contents information
引发: BrowserIdManagerErr?,条件是调用时cookie名称空间不是一个浏览器id名称空间。
返回带有cookie/form变量名称的字符串,这个字符串用于帮助当前浏览器id管理者对象取得浏览器id的数值。比如,_ZopeId?。
所需许可: Access contents information
如果浏览器id来自于表单变量则返回真。
所需许可: Access contents information
引发: BrowserIdManagerErr?,条件是不存在当前浏览器id。
如果当前请求存在相应的浏览器id则返回真。
所需许可: Access contents information
其中bid为浏览器id,这个方法的功能是强制设置bid的cookie。
所需许可: Access contents information
引发: BrowserIdManagerErr?,条件是调用时cookies名称空间不是浏览器名称空间。
这是在浏览器id管理者对象在操作时引发的错误。
例外可以在PythonScript中捕捉。导入的方式如下:
from Products.Sessions import BrowserIdManagerErr
Zope Session Data Manager 接口
Session Data Manager 负责维护Session Data 对象,并对与Session Data相关的请求提供服务。它还与Browser Id Manager一起来提供浏览器id信息。
返回参数key所指定的Session Data Object。如果没有,则返回None。
所需许可: Access arbitrary user session data
返回当前浏览器id对应的Session Data Object。如果不存在当前浏览器id,并且create为真,则返回一个新的Session Data Object。如果不存在当前浏览器id,并且create为假,则返回None。
所需许可: Access session data
返回浏览器id管理者对象。
如果不能找到浏览器id管理者对象则引发SessionDataManagerErr。
所需许可: Access session data
如果当前浏览器id在Session Data Container中包含一个相应的Session Data Object 则返回真。如果不存在,不会创建一个新的Session Data Object。
所需许可: Access session data
Transient 对象
短暂对象(transient object)是包含在短暂对象容器中的临行对象。
大多数情况下,可简单的把短暂对象看作是一个字典(dictionary)。可以这样来使用:
SESSION['foo']=1当通过基于Python的脚本或DTML时,你可以使用get,set和delete方法。
foo=SESSION['foo']
del SESSION['foo']
短暂对象的方法不受安全保护。
有些时候需要重新分配变量。比如:
l=SESSION['myList']
l.append('spam')
SESSION['myList']=l
通过k参数,调用 delitem 。
把最后访问时间设置为当前值。
以整数秒格式返回短暂对象的创建时间。
返回数值序列。
如果键中有k,则返回真。
以整数秒格式返回最后一次访问短暂对象的时间。
返回对象的id。
合并字典d。
删除所有的key/value数值。
返回(key, value)元素序列。
返回键序列。
返回键k对应的数值。如果k不存在并且默认不是marker,则返回default,否则引发KeyError。
设置k的值为v,即调用setitem。
返回对象所在容器的键值。
让短暂对象失效。
通过Products.Transience.Transience模块导入的例外,当试图给已经满了的TransientObjectContainer添加对象时引发这个例外。
一个例外可以通过PythonScripts捕捉。导入方式为:
from Products.Transience import MaxTransientObjectsExceeded
TransientObjectContainer?用于存储短暂对象,常见的是session数据。
用k创建一个子对象并返回它。
如果对象已经存在,则引发KeyError。
"k"必须为字符串,否则引发TypeError。
如果容器中已经满了,则引发MaxTransientObjectsExceeded。
设置前撤消函数为f。
如果f不可调用并为字符串,则认为是可调用函数的路径。
前撤