Personal tools
You are here: Home Zope Zope宝典 API参考
Document Actions

API参考

by 潘俊勇 last modified 2006-01-24 17:06
_转自: 杜文山《快乐程序》第一辑_ API 参考 这个文档描述了基础Zope对象集里的最常用接口。这些参考用于编写DTML、Perl和Python脚本,而这些脚本可以创建和操纵Zope对象。
  1. AccessControl 模块
  2. AuthenticatedUser 模块
  3. DTMLDocument 模块
  4. DTMLMethod 模块
  5. DateTime模块
  6. ExternalMethod 模块
  7. File 模块
  8. Folder 模块
  9. Image 模块
  10. MailHost 模块
  11. ObjectManagerItem 模块
  12. PropertyManager 模块
  13. PropertySheet 模块
  14. PropertySheets 模块
  15. PythonScript 模块
  16. Request 模块
  17. Response 模块
  18. Script 模块
  19. SessionInterfaces
  20. TransienceInterfaces 模块
  21. UserFolder 模块
  22. Vocabulary 模块
  23. ZCatalog 模块
  24. ZSQLMethod 模块
  25. ZTUtils 模块
  26. math 模块
  27. random 模块
  28. sequence 模块
  29. standard 模块
  30. string 模块



这个参考主要描述了最常用的Zope对象接口。适用于编写DTML、Perl和Python脚本,从而创建和操纵Zope对象。

1. AccessControl? 模块

1.1. AccessControl?: 安全函数和类

这个模块中的函数和类适用于基于Python的脚本和页面模板。

1.1.1. SecurityManager?

SecurityManager?提供检查权限的方法。

1.1.1.1. calledByExecutable(self)

返回一个布尔变量,表示是否通过可执行对象进行调用。

许可
始终存在

1.1.1.2. validate(accessed=None, container=None, name=None, value=None, roles=None)

验证权限

参数:

accessed
正在访问的对象
container
对象所在的容器对象
name
要访问的变量名称
value
通过访问要取得的数值
roles
已知对象的角色
这些参数可以通过关键字参数的方式提供。其中一些参数可以忽略,但在某些情况下有可能会拒绝访问。最好提供所有的参数。
许可
始终存在

1.1.1.3. checkPermission(self, permission, object)

检查指定的对象是否具有指定的许可。

许可
始终存在

1.1.1.4. getUser(self)

取得当前已授权用户。参见AuthenticatedUser 类。

许可
始终存在

1.1.1.5. validateValue(self, value, roles=None)

常用的验证数值函数

许可
始终存在

2. AuthenticatedUser? 模块

2.1. AuthenticatedUser?

这个接口需要由用户验证后返回的对象来提供支持,这个接口用于访问控制。

2.1.1. getUserName()

返回用户名称

许可
始终存在

2.1.2. getId()

取得用户的ID。ID可以用于通过Python从用户的UserDatabase中得到用户。

许可
始终存在

2.1.3. has_role(roles, object=None)

如果用户具有roles列表中的值,至少要有一个,则返回真。object是可选的环境对象。

许可
始终存在

2.1.4. getRoles()

返回用户角色的列表。

许可
始终存在

2.1.5. has_permission(permission, object)

如果用户在object对象上有permission许可,则返回真。

许可
始终存在

2.1.6. getRolesInContext(object)

返回分配用户的角色列表,包含在object对象环境中分配的本地角色。

许可
始终存在

2.1.7. getDomains()

返回用户的域限制列表。

许可
始终存在

3. DTMLDocument? 模块

3.1. DTMLDocument?(ObjectManagerItem?, PropertyManager?) 类

DTML文档是包含和执行DTML代码的Zope对象。它用于显示Web页面。

3.1.1. manage_edit(data, title)

更改DTML文档,用data替换内容,用title更改标题。 data参数可以是一个文件对象或一个字符串。

许可
Change DTML Documents

3.1.2. document_src()

返回DTML文档的源文本。

许可
View management screens

3.1.3. __call__(client=None, REQUEST={}, RESPONSE=None, **kw)

调用DTML文档,执行文档中所包含的DTML代码。这个方法返回对象执行的结果。

在这个过程中,DTML文档经常需要把各种名称解析成对象。例如,当执行代码 <dtml-var spam> 时,DTML引擎试图解析名称spam。

要解析名称,必须给文档传递一个名称空间,在这个名称空间里查找这些名称。这个过程可以通过以下几种方式完成:

  • 通过传递一个client对象 -- 如果传递参数client,那么名称作为参数的属性来查找。
  • 通过传递一个REQUEST映射 -- 如果传递了参数REQUEST,那么名称作为参数的数据项来查找。如果对象不是一个映射,当视图查找名称时引发一个TypeError错误。
  • 通过传递关键字参数 -- 名称和它们的值可以作为文档的关键字参数来传递。
DTML文档所被赋予的名称空间是这三种方式的混合物。你可以传递任意数量的参数或者根本就不传递参数。名称首先在关键字参数中查找,然后在client里,最后在REQUEST映射里。

除了在指定的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对象作为第二个参数传递给文档。

许可
View

3.1.4. get_size()

返回DTML文档的源文本的大小,单位是字节。

许可
View

3.2. ObjectManager? 构造器

3.2.1. manage_addDocument(id, title)

给当前的ObjectManager添加一个DTML 文本。

4. DTMLMethod? 模块

4.1. DTMLMethod?(ObjectManagerItem?) 类

DTML方法是包含和执行DTML代码对象。它可以作为一个模板来显示其它对象。它还可以存储一小段内容,这些内容可以被插入到其它的DTML文档或DTML方法里。

DTML方法的id 通过document_id变量提供,title通过document_title变量提供。

4.1.1. manage_edit(data, title)

用于更改DTML方法,用data替换内容,更改title。data参数可以是一个文件对象或字符串。

许可
Change DTML Methods

4.1.2. document_src()

返回DTML方法的源文本。

许可
View management screens

4.1.3. __call__(client=None, REQUEST={}, **kw)

调用DTML方法,执行其中的DTML代码。这个方法返回对象执行的结果。

在这个过程中,DTML方法经常需要把各种名称解析成对象。例如,当执行代码 &lt;dtml-var spam&gt; 时,DTML引擎试图解析名称spam。

要解析名称,必须给文档传递一个名称空间,在这个名称空间里查找这些名称。这个过程可以通过以下几种方式完成:

  • 通过传递一个client对象 -- 如果传递参数client,那么名称作为参数的属性来查找。
  • 通过传递一个REQUEST映射 -- 如果传递了参数REQUEST,那么名称作为参数的数据项来查找。如果对象不是一个映射,当视图查找名称时引发一个TypeError错误。
  • 通过传递关键字参数 -- 名称和它们的值可以作为文档的关键字参数来传递。
DTML方法所被赋予的名称空间是这三种方式的混合物。你可以传递任意数量的参数或者根本就不传递参数。名称首先在关键字参数中查找,然后在client里,最后在REQUEST映射里。

不同于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对象作为第二个参数传递给文档。

许可
View

4.1.4. get_size()

返回DTML方法的源文本的大小,单位是字节。

许可
View

4.2. ObjectManager? 构造器

4.2.1. manage_addDTMLMethod(id, title)

给当前的ObjectManager添加一个DTML 文本。

5. DateTime?模块

5.1. DateTime?

DateTime?对象提供处理日期和时间的接口。DateTime还提供了日历操作方法、日期和时间算法和格式化方法。

DateTime?对象可以表示当前事件,并且提供显示接口,不影响对象绝对值。

DateTime?对象可以通过形式多样的字符串或数值来创建,或者通过其它DateTime对象计算得到。DateTime可以把时间的格式转换成不同时区的格式,还可以在一个按照给定时区创建DateTime对象。

DateTime?对象支持数值计算:

  • 两个DateTime对象可以相减,从而获得两者间的时间差。
  • 一个DateTime对象和一个正的或负的数字可以相加,从而获得一个新DateTime对象。
  • 一个正的或负的数字和一个DateTime对象可以相加,从而获得一个新DateTime对象。
  • 一个正的或负的数字可以从一个DateTime对象中减去,从而获得一个新DateTime对象。
DateTime?对象通过使用标准的int、long和float函数可以把从1901年1月1日以来的时间转换成整数、长整数和浮点数形式。(兼容性注意:int、long 和float返回自从1901年以来的GMT天数,而不是按照本地时区计算的天数)。DateTime对象还可以访问以浮点数格式表示的值,它可以和Python的time模块一起使用,前提是对象的值属于这个基于新纪元的time模块的时间值的范围之内。

DateTime?对象应该认为是不变的,所有转换和数值操作返回一个新的DateTime对象而不是修改当前的对象。

DateTime?对象总是按照绝对UTC时间维护数值,根据时区以及参数来提供数值。DateTime对象方法基于时区返回相应的值。

注意如果没有指定时区,默认使用本地时区来表示时间。

创建DateTime对象可使用0到7个参数。

  • 如果采用不带参数的方式调用函数,那么返回当前的日期时间,并且按照本地时区表示。
  • 如果采用带有一个字符串参数的方式调用函数,其中这个字符串代表时区名称,那么返回指定时区示当前时间的DateTime对象。
  • 如果采用带有唯一的字符串参数的方式调用函数,其中字符串表示一个有效的日期或时间,那么就返回相应的日期或时间对象。 一般来说,任何北美居民可以明确识别的日期或时间格式都是可接受的。(其中的原因是:在北美,像2/1/1994这样的日期被认为是February 1, 1994,然而在世界上的一些地方,它被认为是January 2, 1994。)一个日期时间对象包含两个部分:日期部分和可选的时间部分,由一个或多个空格分隔。如果时间部分忽略,则假定为12:00am。时区名称可以在日期时间字符串最后一个元素中指定,任何可以识别的时区名称用于计算日期时间值。(如果你用字符串Mar 9, 1997 1:45pm US/Pacific 创建一个DateTime对象,它的值在本质上等同于你在一台属于那个时区的机器上在指定的日期和时间捕捉的时间):

    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小时制。

  • 如果DateTime函数被调用时带有一个数字参数,这个数字被假定为浮点数值,例如由time.time()返回的值。返回的DateTime对象表示了用本地时区表示的浮点数形式的gmt值。
  • 如果函数调用时带有两个数字参数,那么第一个被认为是一个整数年,第二个参数被认为是在本地时区中本年开始以来的天数偏移量。返回的日期时间值是用本地时区表示的给定年份开始以来的天数的给定偏移量。偏移量可以是正数或负数。两位数的年被假定为20世纪当中的年份。
  • 如果函数调用时带有两个参数——第一个以浮点数形式提供的参数表示了在GMT里新纪元以来的秒数,就像那些由time.time()返回的数字,第二个以字符串形式提供的参数指定一个可识别的时区,返回具有GMT时间值的DateTime对象并按照给定时区形式表示。
      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
    
  • 如果函数调用时带有三个或更多的数字参数,那么第一个被认为是整数年,第二个被认为是整数月,第三个被认为是整数天。如果结合在一起的值无效,那么引发一个DateTimeError。两位数的年被认为是20世纪中的年份。第4、5、6个参数分别指定小时、分钟和秒——小时和分钟应该为正整数,秒应该为一个正的浮点数——所有这些如果没有给定则默认为0。可以给定一个可选择的字符串,从而作为最后一个参数来表示时区(这个效果就好像是你已经在一台位于指定时区中的机器上选定了time.time()的值。)
如果传递给DateTime构造器的字符串参数不能解析,它引发一个DateTime.SyntaxError?错误。无效的日期、时间或时区组件引发一个DateTime.DateTimeError? 错误。

模块函数Timezones()返回一个DateTime模块可识别的时区列表。时区名称识别是不区分大小写的。

5.1.1. strftime(format)

返回按照format格式提供的日期时间字符串。

参见 Python中的 time.strftime 函数。

5.1.2. dow()

返回用整数表示的星期中的天数,星期日是0。

许可
始终存在

5.1.3. aCommon()

返回按照“Mar 1, 1997 1:45 pm”格式表示的日期时间字符串。

许可
始终存在

5.1.4. h_12()

返回12小时制的小时数。

许可
始终存在

5.1.5. Mon_()

兼容:见pMonth。

许可
始终存在

5.1.6. HTML4()

按照符合HTML 4.0规范的格式返回对象,这个规范是ISO8601标准之一。

参见 HTML 4.0 规范

日期输出格式为:YYYY-MM-DDTHH:MM:SSZ T,其中Z是文本字符。时间为UTC(通用协调时间)时间。

许可
始终存在

5.1.7. greaterThanEqualTo(t)

和其它DateTime对象或浮点数比较DateTime对象,比如由Python 的time 模块返回的数值。如果对象表示一个大于或等于指定的DateTime或time 模块风格的时间的日期或时间对象,则返回真。通过比较长整数型的毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.8. dayOfYear()

返回按照对象所在时区表示的年的天数。

许可
始终存在

5.1.9. lessThan(t)

与其它的DateTime对象或一个浮点数比较DateTime对象,比如由Pythontime 模块返回的数字。如果对象表示一个小于指定的DateTime或time 模块风格的时间的日期或时间对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.10. AMPM()

返回一个对象的最接近秒的时间字符串。

许可
始终存在

5.1.11. isCurrentHour()

如果这个对象在所在时区中表示一个属于当前小时范围里的日期或时间对象,则返回真。

许可
始终存在

5.1.12. Month()

返回完整的月份的名称。

许可
始终存在

5.1.13. mm()

以两位数字符形式返回月份。

许可
始终存在

5.1.14. ampm()

返回适当的时间修饰语(am或pm)。

许可
始终存在

5.1.15. hour()

返回以24小时制表示的小时。

许可
始终存在

5.1.16. aCommonZ()

返回以"Mar 1, 1997 1:45 pm US/Eastern"格式表示对象值的字符串。

许可
始终存在

5.1.17. Day_()

兼容:见pDay。

许可
始终存在

5.1.18. pCommon()

返回以"Mar. 1, 1997 1:45 pm"格式表示的对象值的字符串。

许可
始终存在

5.1.19. minute()

返回分钟。

许可
始终存在

5.1.20. day()

返回以整数表示的天。

许可
始终存在

5.1.21. earliestTime()

返回一个新的表示最早时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天。

许可
始终存在

5.1.22. Date()

返回对象的日期字符串。

许可
始终存在

5.1.23. Time()

返回对象的最接近秒的时间字符串。

许可
始终存在

5.1.24. isFuture()

如果这个对象表示一个晚于调用时间的时间日期对象,则返回真。

许可
始终存在

5.1.25. greaterThan(t)

和其它的DateTime对象或一个浮点数比较DateTime对象,比如和由Pythontime 模块返回的数字比较。如果对象表示一个大于指定的DateTime或符合time 模块风格的时间的date/time对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.26. TimeMinutes?()

返回对象的时间字符串,不显示秒。

许可
始终存在

5.1.27. yy()

返回以两位数字符表示的日历年。

许可
始终存在

5.1.28. isCurrentDay()

如果对象在所在时区中表示一个属于当前天范围内的日期时间对象,则返回真。

许可
始终存在

5.1.29. dd()

返回以两位数字符形式表示的天。

许可
始终存在

5.1.30. rfc822()

返回以RFC 822格式显示的日期。

许可
始终存在

5.1.31. isLeapYear()

如果当前年(在对象所属时区中)是闰年则返回真

许可
始终存在

5.1.32. fCommon()

返回一个以"March 1, 1997 1:45 pm"格式表示的对象值的字符串。

许可
始终存在

5.1.33. isPast()

如果对象表示一个早于调用时间的日期时间对象,则返回真。

许可
始终存在

5.1.34. fCommonZ()

返回一个以"March 1, 1997 1:45 pm"格式表示的对象值的字符串。

许可
始终存在

5.1.35. timeTime()

返回UTC中按照Python time模块所使用的格式以浮点数形式表示的日期时间。注意,采用那些拥有对于time模块来说没有含义的值的DateTime来创建日期或时间是可能的。

许可
始终存在

5.1.36. toZone(z)

返回当前对象在指定的z时区中的DateTime 。

许可
始终存在

5.1.37. lessThanEqualTo(t)

和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个小于或等于指定的DateTime或time模块风格的时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.38. Mon()

兼容:参见aMonth。

许可
始终存在

5.1.39. parts()

返回包含对象的日历年、月、日、小时、分钟、秒和时区值的元组。

许可
始终存在

5.1.40. isCurrentYear()

如果这个对象在所属时区中表示一个属于当前年范围以内的日期时间对象,则返回真。

许可
始终存在

5.1.41. PreciseAMPM?()

返回对象的时间字符串。

许可
始终存在

5.1.42. AMPMMinutes?()

返回对象的时间字符串,不显示秒。

许可
始终存在

5.1.43. equalTo(t)

和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个等于指定的DateTime或time模块风格时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.44. pDay()

返回星期的简短名称(带有句点)。

许可
始终存在

5.1.45. notEqualTo(t)

和另外一个DateTime对象或一个浮点数比较DateTime对象,比如和由Python time模块返回的数字进行比较。如果对象表示一个不等于指定的DateTime或time模块风格时间的日期时间,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。

许可
始终存在

5.1.46. h_24()

返回24小时制的小时。

许可
始终存在

5.1.47. pCommonZ()

返回以"Mar. 1, 1997 1:45 pm US/Eastern"格式表示的对象值的字符串。

许可
始终存在

5.1.48. isCurrentMonth()

如果对象在所属的时区中表示一个属于当前月范围以内的日期时间对象,则返回真。

许可
始终存在

5.1.49. DayOfWeek?()

兼容:参见aDay。

许可
始终存在

5.1.50. latestTime()

返回一个新的表示最迟时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天。

许可
始终存在

5.1.51. dow_1()

返回以整数表示的星期的天数,星期日为1。

许可
始终存在

5.1.52. timezone()

返回对象的所属时区。

许可
始终存在

5.1.53. year()

返回对象的日历年。

许可
始终存在

5.1.54. PreciseTime?()

返回对象的时间字符串。

许可
始终存在

5.1.55. ISO()

按照ISO标准格式返回对象。

输出格式为:YYYY-MM-DD HH:MM:SS

许可
始终存在

5.1.56. millis()

返回自从GMT新纪元以来的毫秒数。

许可
始终存在

5.1.57. second()

返回秒

许可
始终存在

5.1.58. month()

返回以整数表示的对象的月份。

许可
始终存在

5.1.59. pMonth()

返回简写(带有句点)的月份名称。

许可
始终存在

5.1.60. aMonth()

返回简写的月份名称。

许可
始终存在

5.1.61. isCurrentMinute()

如果对象在所属时区中表示一个属于当前分钟范围以内的日期时间对象,则返回真。

许可
始终存在

5.1.62. Day()

返回星期中天的完整名称。

许可
始终存在

5.1.63. aDay()

返回星期中天的简写名称。

许可
始终存在

6. ExternalMethod? 模块

6.1. ExternalMethod?

Web可调用函数,用于封装外部Python函数。

函数在一个外部文件里定义。可以把这个文件看成是模块,但是它不是一个模块。它不是直接导入,而是读入和求值。这个文件必须位于Zope安装目录中的Extensions子目录里,或者在一个产品目录的Extensions子目录里。

由于外部方法装载的方式,不能导入位于Extensions目录中的Python模块。可以导入那些在Zope安装目录中的lib/python目录里提供的模块,或者是导入那些位于lib/python目录中的软件包里的模块。

6.1.1. manage_edit(title, module, function, REQUEST=None)

用于更改外部方法(External Method)

参见manage_addExternalMethod中的参数模块和函数的描述。

注意,调用manage_edit会引起重新载入模块。这对于在调试期间查看更改的效果来说是有用的,但是对于那些依赖共享的全局数据的函数来说,它会导致问题。

6.1.2. __call__(*args, **kw)

调用外部方法。

调用外部方法大致等同于用Python调用原始函数。位置和关键字参数像通常那样传递。注意,它不象通常的Python方法那样,self参数必须明确传递。不符合这个原则的情况是:

  • 提供的参数数量少于必需的参数数量。
  • 函数的第一个参数的名称是self。
在这种情况下,第一个参数使用上级URL。

6.2. ObjectManager? 构造器

6.2.1. manage_addExternalMethod(id, title, module, function)

添加一个外部方法对象。

除了标准的用于创建对象的参数id 和 title外,还定义了以下的参数:

function
Python函数的名称。它可以是一个普通的Python函数或是一个被绑定的方法。
module
包含函数定义的文件名称。
模块通常位于Extensions目录,然而,文件名可以拥有一个产品前缀,用以显示它可以在一个产品目录里找到。

例如,如果模块是ACMEWidgets.foo,那么就先尝试使用文件lib/python/Products/ACMEWidgets?/Extensions/foo.py。如果失败了,那么就使用文件Extensions/ACMEWidgets?.foo.py

7. File 模块

7.1. File(ObjectManagerItem?, PropertyManager?) 类

File是一种包含文件内容的Zope对象。个文件对象可以用来上载或下载文件信息。

在Zope里使用文件对象很容易。最常见的用法是在一个Web页面里显示一个文件对象的内容,比如使用DTML:

  <dtml-var standard_html_header>
    <dtml-var FileObject>
  <dtml-var standard_html_footer>
一个更为复杂的例子是用来给用户显示可以下载的文件对象。为了让用户能够下载文件,下一个例子显示了文件夹里的每个文件对象的链接:
  <dtml-var standard_html_header>
  <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>
在这个例子里,通过absolute_url方法和id创建当前ObjectManager中的所有文件对象的HTML超级链接列表。

参见ObjectManager的objectValues方法。

7.1.1. getContentType()

返回文件内容类型。

许可
View

7.1.2. update_data(data, content_type=None, size=None)

用data更新文件的内容。

data参数必须为一个字符串。如果没有提供content_type,那么就不设置内容类型。如果没有提供size,那么文件的大小就根据data进行计算。

许可
Python only

7.1.3. getSize()

返回文件大小,单位为字节。

许可
View

7.2. ObjectManager? 构造器

7.2.1. manage_addFile(id, file="", title="", precondition="", content_type="")

添加一个新文件对象。 采用file文件内容创建一个新文件对象。

8. Folder 模块

8.1. Folder(ObjectManagerItem?, ObjectManager?, PropertyManager?) 类

Folder是一种通用容器对象。

文件夹是Zope里最常见的ObjectManager子类。

8.2. ObjectManager? 构造器

8.2.1. manage_addFolder(id, title)

给当前的ObjectManager添加一个文件夹。

许可
Add Folders

9. Image 模块

9.1. Image(File) 类

Image是一种包含图像内容的Zope对象。Image对象可用来上载或下载图像信息。

图像对象有两个定义大小的属性,height 和 width 。图像上载时,计算出这两个属性。对于Zope不能识别的图像类型,这些属性可能无法定义。

在Zope里使用Image对象很容易。最常见的用法是在Web页面里显示Image对象的内容。通过DTML引用这个对象就可以实现:

  <dtml-var standard_html_header>
    <dtml-var ImageObject>
  <dtml-var standard_html_footer>
它生成一个HTML IMG标记符,引用图像的URL。它等同于:
  <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')">


9.1.1. tag(height=None, width=None, alt=None, scale=0, xscale=0, yscale=0, **args)

这个方法返回一个包含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标记符。

许可
View

9.2. ObjectManager? 构造器

9.2.1. manage_addImage(id, file, title="", precondition="", content_type="")

添加一个新Image对象。

用file文件内容创建一个新Image对象。

10. MailHost? 模块

10.1. MailHost?

MailHost?(邮件主机)对象可作为简单邮件传输协议(SMTP)服务器的适配器。MailHost用来通过DTML sendmail 标记符查找合适的发送邮件的主机。

10.1.1. send(messageText, mto=None, mfrom=None, subject=None, encode=None)

发送电子邮件消息,messageText是rfc822格式。可设置编码。 参数为:

messageText
邮件消息的正文。
mto
消息接收者的字符串或列表。
mfrom
消息发送者的地址。
subject
消息的主题。
encode
rfc822定义的消息编码。默认为None,则意味着没有进行编码。有效的值为base64、quoted-printable和uuencode 。

10.1.2. simple_send(self, mto, mfrom, subject, body)

发送电子邮件消息。参数为:

mto
消息接收者的字符串或列表。
mfrom
消息发送者的地址。
subject
消息的主题。
body
消息正文。

10.2. MailHost? 构造器

10.2.1. manage_addMailHost(id, title="", smtp_host=None, localhost=localhost, smtp_port=25, timeout=1.0)

给一个ObjectManager添加一个MailHost对象。

=ObjectManager? 模块==

10.3. 0ObjectManager 类

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文档里都应该有注解。

10.3.1. objectItems(type=None)

这个方法返回(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>


许可
Access contents information

10.3.2. superValues(type)

这个方法返回一个包含在ObjectManager和所有它的双亲ObjectManager里的给定meta_type的对象列表。

type参数指定meta_type。它可以是一个字符串,从而指定一个meta_type,或者它可以是一个字符串列表,用来指定多个meta_type。

许可
Python only

10.3.3. objectValues(type=None)

这个方法返回一个对象序列。

就像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可限制文件夹的返回的结果。

许可
Access contents information

10.3.4. objectIds(type=None)

这个方法返回一个对象id列表。

你可以传递一个参数,从而指定用什么对象meta_types来限制要生成的结果。这个参数可以是一个字符串,指定一个meta_type,或者它可以是一个字符串列表,用以指定多个meta_type。

例子:

  <dtml-in objectIds>
    <dtml-var sequence-item>
  <dtml-else>
    There are no sub-objects.
  </dtml-in>
这段DTML代码显示所有包含在当前ObjectManager里的对象的id 。

许可
Access contents information

11. ObjectManagerItem? 模块

11.1. ObjectManagerItem?

Zope对象可以包含在ObjectManager里。几乎所有的可以通过Web管理的Zope对象都是ObjectManagerItem 。

ObjectManagerItem?有这些实例属性:

title
对象的标题,用于描述对象的可选字符串。
meta_type
对象类型的简短名称。这是显示在产品添加列表里的对象名称,并且用在按照类型过滤对象的时候。这个属性由对象的类提供,不能直接修改。
REQUEST
当前Web请求,这个对象自动获得,不需要设置。

11.1.1. title_or_id()

如果title不为空,它返回标题;否则,它返回id。

许可
Always available

11.1.2. getPhysicalRoot()

返回顶级Zope应用程序对象。

许可
Python only

11.1.3. manage_workspace()

当用户在ObjectManager的Contents视图或在Zope管理导航视图中选择一个数据项时调用这个Web方法。

许可
View management screens

11.1.4. getPhysicalPath()

从根取得对象的路径,忽略虚拟主机。

许可
始终存在

11.1.5. unrestrictedTraverse(path, default=None)

返回通过对象的给定path路径所获得的对象,方法在这些对象上调用。这个方法“不受限制”,这是因为几乎没有执行安全检查。

如果对象没有找到,那么返回默认的参数。

许可
Python only

11.1.6. getId()

返回对象的id。

id是对象在它所属ObjectManager中的唯一名称。它应该为一个字符串,它可以包含字母、数字、下划线、箭号、逗号和空格。

许可
Always available

11.1.7. absolute_url(relative=None)

返回对象的绝对URL。

如果提供的relative参数为true,那么返回的URL相对于站点对象。注意,如果使用虚拟主机,那么返回的路径是一个逻辑路径而不是一个物理路径。

许可
Always available

11.1.8. this()

返回对象。

它在两种情况中使用。第一,它提供一种在DTML表达式里指向一个对象的方式。

它的第二个用法是有点深奥。它提供了一种获取对象的方式,而不用从它被获取的地方得到完整的关联。这很有用,例如,使用一个方法,这个方法属于一个数据项方法的非数据项子对象,你需要得到子对象的关联环境外的数据项。

许可
Always available

11.1.9. restrictedTraverse(path, default=None)

返回通过给定path路径所获得的对象,在这个过程中总是执行安全检查。

如果一个对象没有找到,那么返回默认的参数。

许可
Always available

11.1.10. title_and_id()

如果title不为空,它返回title,其后为用括号扩起来的id。否则,它返回id。

许可
Always available

12. PropertyManager? 模块

12.1. PropertyManager?

属性管理器用于管理对象的属性。属性可以通过Web或DTML管理。

除了拥有类型,属性可以为可写或只读,并且可有默认值。

12.1.1. propertyItems()

返回(id,property)元组列表。

许可
Access contents information

12.1.2. propertyValues()

返回属性值列表。

许可
Access contents information

12.1.3. propertyMap()

返回一个映射元组,显示属性元数据,元数据包括id、 type 和 mode。

许可
Access contents information

12.1.4. propertyIds()

返回属性id的列表。

许可
Access contents information

12.1.5. getPropertyType(id)

取得属性id的类型。如果此属性不存在它返回None。

许可
Access contents information

12.1.6. getProperty(id, d=None)

返回属性id的值。如果属性没有找到,返回可选的第二个参数或返回None。

许可
Access contents information

12.1.7. hasProperty(id)

如果PropertyManager有属性id,则返回真。否则,它返回假。

许可
Access contents information

13. PropertySheet? 模块

13.1. PropertySheet?

PropertySheet?用来组织和处理相关属性集。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet可以提供或不提供管理属性的Web界面。

13.1.1. xml_namespace()

返回一个名称空间字符串,对于这个属性集它可以被用作一个xml名称空间。如果对于一个给定属性单(特别是添加在ZClass定义里的属性单)没有默认的名称空间,它可以是一个空字符串。

许可
Python only

13.1.2. propertyItems()

返回一个(id, property)元组列表。

许可
Access contents information

13.1.3. propertyValues()

返回一个实际属性值的列表。

许可
Access contents information

13.1.4. getPropertyType(id)

取得属性id的类型。如果此属性不存在则返回None。

许可
Python only

13.1.5. propertyInfo()

返回一个包含属性元数据的映射。

许可
Python only

13.1.6. getProperty(id, d=None)

取得属性id,如果此属性没有找到,返回可选的第二个参数或None。

许可
Python only

13.1.7. manage_delProperties(ids=None, REQUEST=None)

按照给定的id删除一个或多个属性。id参数应该为一个包含要被删除的属性id的(元组或列表)序列。如果id为空,不进行操作。如果任何在id中指定的属性不存在,引发一个错误。

一些对象有指定的属性,它们由作者定义,不能被删除。如果这些属性之一在id中被指定,返回一个HTML错误消息。

如果没有为REQUEST传递数值,该方法返回None。如果为REQUEST提供一个值(就像它通过Web被调用一样),显示对象的属性管理表单。

这个方法可以通过Web使用DTML或Python代码来调用。

许可
Manage Properties

13.1.8. manage_changeProperties(REQUEST=None, **kw)

修改现有对象的属性,方式是通过REQUEST、包含name:value对或者传递name=value关键字参数传递一个映射对象。

一些对象拥有特殊的属性,这些属性由产品作者定义,因此不能更改。如果你视图通过这个方法更改这些属性,就会引发一个错误。

注意,当调用这个方法时,不进行类型检查或转换,因此要确保被更新的值属于正确的类型。如果为REQUEST提供了一个值(就像它通过Web调用时那样),这个方法返回一个HTML消息对话框。如果没有传递REQUEST,这个方法成功时返回None。

这个方法可以通过Web使用DTML或Python代码来调用。

许可
Manage Properties

13.1.9. manage_addProperty(id, value, type, REQUEST=None)

用给定的id、value 和 type添加一个新属性。

这些属性类型是:

boolean
1或0 。
date
DateTime? 值,例如"12/31/1999 15:42:52 PST"。
float
浮点数,例如12.4。
int
整数,例如 12。
lines
字符串列表,每行一个。
long
长整数,例如12232322322323232323423。
string
字符串,例如 "This is a string"。
text
多行的字符串,例如一个段落。
tokens
用空格分隔的字符串列表,例如"one two three" 。
selection
用一个下拉菜单选择的字符串。
multiple selection
用一个选择列表选择的字符串列表。
这个方法使用传入的type把参数值转换成指定的类型。如果给定的value不能转换 ,就引发一个ValueError错误。

对selection 型和 multiple selection型属性所赋予的值可以是一个特征或方法名称。属性或方法必须返回一个序列值。

如果给定的type不能识别,对象只是存储给定的value和type。

如果没有为REQUEST传递值,这个方法返回None。如果为REQUEST提供一个值(就像通过Web调用一样),那么显示对象的属性管理表单。

这个方法可以通过Web使用DTML或Python代码来调用。

许可
Manage Properties

13.1.10. propertyMap()

返回一个映射元组,为属性提供元数据。

许可
Python only

13.1.11. propertyIds()

返回属性id的列表。

许可
Access contents information

13.1.12. hasProperty(id)

如果含有给定id的属性,则返回真;否则,它返回假。

许可
Access contents information

14. PropertySheets? 模块

14.1. PropertySheets?

PropertySheet?用于组织和处理相关属性集。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet对象通过PropertySheets对象访问,它充当一个PropertySheet实例集合。

支持属性单的对象(支持PropertyManager接口或者ZClass对象的对象)有一个PropertySheets属性(一个PropertySheets实例),它是PropertySheet对象的集合。PropertySheets对象提供一个接口,就像一个Python映射,因此单独的PropertySheet对象就可以通过字典风格的键索引来访问。

14.1.1. get(name, default=None)

返回按照name区分的PropertySheet,或者,如果指定的PropertySheet没有找到,则返回默认给定的值。

许可
Python only

14.1.2. values()

返回一个包含集合里所有PropertySheet对象的序列

许可
Python only

14.1.3. items()

返回一个序列,它包含每个PropertySheet对象的(id, object)元组。

许可
Python only

15. PythonScript? 模块

15.1. PythonScript?(Script) 类

Python脚本包含Python代码,它通过以下方式执行:

  • 通过Web调用脚本,方式是使用Web浏览器访问它。
  • 使用其它的脚本对象调用脚本。
  • 使用一个方法对象调用脚本,例如一个DTML方法。 Python脚本包含Python语言的安全子集。Python脚本必须是安全的,这是因为众多不同的用户可以潜在的通过不安全的方式编辑它们,例如通过Web这种媒介。以下的安全考虑促成了对Python脚本进行安全限制:
  • 由于许多用户都可以使用Zope,Python脚本必须确保它不能让用户做不允许做的事情,例如删除没有权限删除的对象。为此,Python脚本在执行的过程中进行许多安全检测。
  • 由于Python脚本可以通过不安全的Web媒介来编辑,因此不允许访问Zope服务器的文件系统。这样,有些通常的Python内建方法,例如像open这样的方法就不允许使用。
  • 由于许多标准的模块不受以上两个安全要求的限制,所以只有Python模块中的一个小子集可以用import语句导入到Python脚本中来,除非它们已经通过Zope的安全策略的验证。当前,以下标准的Python模块已经通过验证:
    • string
    • math
    • whrandom 和 random
    • Products.PythonScripts?.standard
  • 因为Python的exec语句可以执行任何Python代码,所以它在Python方法中不支持。
  • 由于一些Python内建函数可能引发安全问题,所以它们不支持。不支持以下Python内建函数:
    • open
    • input
    • raw_input
    • eval
    • execfile
    • compile
    • type
    • coerce
    • intern
    • dir
    • globals
    • locals
    • vars
    • buffer
    • reduce
  • 其它的内建函数部分受到限制。以下内建函数受到限制: range 由于可能导致内存拒绝服务攻击,内建的range函数的创建范围被限制在小于10,000个元素长度。 filter, map, tuple, list 出于同样的原因,根据序列构造列表的内建函数不可以操作字符串。 getattr, setattr, delattr 因为这些可以使Python代码避开Zope的安全系统,它们被替换成定制的、安全限制的版本。
  • 为了和DTML中的Python表达式相一致,这些内建的函数扩充有少量的函数和类:
    • test
    • namespace
    • render
    • same_type
    • DateTime?
  • 由于print语句不能在Zope中像通常那样操作,它的作用有些变化。不是把文本发送到stdout, print而是扩展一个内部变量。这个特殊的内建名称"printed"对所有在当前脚本执行期间打印的文本进行串连求值。

15.1.1. document_src(REQUEST=None, RESPONSE=None)

返回源文本,并且把RESPONSE的内容类型设置为text/plain。

15.1.2. ZPythonScript?_edit(params, body)

更改脚本的参数和正文。这个方法接受两个参数:

params
Python脚本的参数值。必须为一个用逗号分隔的数值列表。如果它不含有一个有效的字符串,就引发一个SyntaxError错误。
body
Python脚本正文值。它必须符合有效的Python句法。如果它不符合有效的Python句法,就引发一个SyntaxError错误。

15.1.3. ZPythonScript?_setTitle(title)

更改脚本的标题。这个方法接受一个title参数,它是脚本标题的新值,并且必须为字符串。

15.1.4. ZPythonScriptHTML?_upload(REQUEST, file="")

把文件里的文本传递给write方法。

15.1.5. write(text)

通过把文本参数分解成组块来更改脚本。前边带有##符号的行将被删去,如果这些行符合##name=value格式,就用来设置元数据,例如标题和参数。剩下的文本是Python脚本的正文。

15.1.6. ZScriptHTML?_tryParams()

返回一个测试脚本所必需的参数的列表。

15.1.7. read()

返回Python脚本的正文,前面放置一个特殊的注释块。这个块含有元数据,这些元数据按照write方法所希望的那样以注释行的形式提供。

15.1.8. ZPythonScriptHTML?_editAction(REQUEST, title, params, body)

更改脚本的主要参数。这个方法接受以下参数:

REQUEST
当前请求。
title
Python脚本标题。它必须为一个字符串。
params
Python脚本参数。必须为一个用逗号分隔的数值列表,并且符合有效的Python函数的署名句法。如果它不含有有效的署名字符串,就引发SyntaxError错误。
body
Python脚本正文。它必须符合有效的Python句法。如果它不符合有效的Python句法,就引发SyntaxError错误。

15.2. ObjectManager? 构造器

15.2.1. manage_addPythonScript(id, REQUEST=None)

给文件夹中添加Python脚本。

16. Request 模块

16.1. Request 类

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里设置的特殊变量:

PARENTS
这是一个已公布对象的列表。因此,PARENTS[0]?将是顶级已公布对象。
REQUEST
请求对象。
RESPONSE
响应对象
PUBLISHED
根据URL取得的已公布对象。
URL
表示请求的URL,不包括查询字符串。
URLn?
URL0等同于URL,URL1等同于URL0删除最后的路径元素,URL2等同于URL1删除最后的元素,依此类推。例如,如果URL=http://localhost/foo/bar,那么URL1=http://localhost/foo,URL2=http://localhost
URLPATHn?
URLPATH0是URL的路径部分,URLPATH1是URL1的路径部分,依此类推。例如,如果URL=http://localhost/foo/bar,那么URLPATH1=/foo , URLPATH2=/ 。
BASEn?
BASE0是最上一级的URL,但不包括Zope应用程序对象。BASE1是Zope应用程序对象的URL。BASE2是Zope应用程序对象的URL,它带有一个附加路径元素,这个元素是已公布对象路径,依此类推。例如,如果URL=http://localhost/Zope.cgi/foo/bar,那么BASE0=http://localhost, BASE1=http://localhost/Zope.cgi , BASE2=http://localhost/Zope.cgi/foo
BASEPATHn?
BASEPATH0是BASE0的路径部分,BASEPATH1是BASE1路径的部分,依此类推。BASEPATH1是相对于根Zope文件夹的外部可见路径,等同于CGI的SCRIPT_NAME,但虚拟主机可识别。例如,如果URL=http://localhost/Zope.cgi/foo/bar,那么BASEPATH0=/, BASEPATH1=/Zope.cgi, BASEPATH2=/Zope.cgi/foo 。

16.1.1. get_header(name, default=None)

返回指定的HTTP报头,或者返回可选的默认参数,或者如果报头未找到返回None。注意起始不带HTTP_的原始报头名称和CGI报头名称都可以识别。例如,Content-Type,CONTENT_TYPE 和 HTTP_CONTENT_TYPE都将返回Content-Type报头。

许可
总是存在

16.1.2. items()

根据REQUEST对象里的所有键,返回一个(key, value)元组序列。

许可
总是存在

16.1.3. keys()

返回REQUEST对象里所有键被排序后形成的序列。

许可
总是存在

16.1.4. setVirtualRoot(path, hard=0)

改变URL、URLn、URLPATHn、BASEn、BASEPATHn和absolute_url(),这样当前的对象拥有路径path。如果hard为真,那么PARENTS被清空。

它提供了虚拟主机支持。它可以通过URL来调用。

许可
总是存在

16.1.5. values()

针对REQUEST对象里的所有键返回一个键值序列。

许可
总是存在

16.1.6. set(name, value)

在REQUEST对象里创建一个新名称并给它分配一个值。这个名称和值存储在Other类别里。

许可
总是存在

16.1.7. has_key(key)

如果REQUEST对象包含key,则返回真,否则返回假。

许可
总是存在

16.1.8. setServerURL(protocol=None, hostname=None, port=None)

设置被指定的SERVER_URL元素,它还影响URL、URLn、BASEn 和 absolute_url()。 它提供虚拟主机支持。

许可
总是存在

17. Response 模块

17.1. Response 类

Response对象表示对一个Zope请求所做出的响应。

17.1.1. setHeader(name, value)

设定一个HTTP返回的报头,让其中的name的值为value,如果已经存在了,则清除此报头以前设定的值。如果文字标记为真,那么报头名称的大小写被保留,否则,在输出中对报头名称进行单词大写处理。

许可
总是存在

17.1.2. setCookie(name, value, **kw)

在浏览器上设置一个HTTP cookie。

响应包括一个HTTP报头,这个报头在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。这会用Response对象里的cookie值覆盖任何以前设定的值。

许可
总是存在

17.1.3. addHeader(name, value)

使用给定的值设置一个新HTTP返回报头,同时保持以前相同名称的报头不变。

许可
总是存在

17.1.4. appendHeader(name, value, delimiter=,)

给cookie附加一个值。

用value值设置HTTP返回报头中的name,如果这个报头存在一个以前设置的值,那么它被附加在后边,用逗号隔开。

许可
总是存在

17.1.5. write(data)

以流的形式返回dada。

HTML数据可以通过使用一种面向流的接口返回。这使得浏览器在处理响应计算的同时显示部分结果。

已公布对象首先应该通过响应对象设置输出报头或cookies。

注意,已公布对象在开始面向流输出后必须不生成任何错误。

许可
总是存在

17.1.6. setStatus(status, reason=None)

设置相应的HTTP状态响应代码;参数可以是一个整数或者是以下字符串之一:

OK、Created、Accepted、NoContent、MovedPermanently、 MovedTemporarily?、NotModified、BadRequest、Unauthorized、Forbidden、NotFound、InternalError、NotImplemented、BadGateway 、 ServiceUnavailable?

这些字符串会转换成相应的整数值。

许可
总是存在

17.1.7. setBase(base)

给返回的文档设置base URL。

许可
总是存在

17.1.8. expireCookie(name, **kw)

让浏览器删除一个HTTP cookie。

响应中HTTP报头如果已经存在一个cookie,将删除客户端中名称为name的cookie。完成的方式是通过发送一个包含有终止日期的新cookie。注意,一些客户端需要指定一个路径,这个路径必须完全符合创建cookie时所给定的路径。这个路径可以通过关键字参数来指定。

许可
总是存在

17.1.9. appendCookie(name, value)

返回一个HTTP报头,它在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。如果cookie的值以前已经在Response对象里设置过了,那么新的值被附加在旧的后边,用一个冒号分隔。

许可
总是存在

17.1.10. redirect(location, lock=0)

引起一个重定向而不引发错误。如果lock关键字参数传递一个真值,那么HTTP重定向响应代码不变,即使以后在处理请求的过程中发生了一个错误(当redirect()已经被调用以后)。

许可
总是存在

18. Script 模块

提供通用的脚本支持

18.1. Script 类

Web可调用的基于脚本的接口

18.1.1. ZScriptHTML?_tryAction(REQUEST, argvars)

使用由字典argvars提供的测试参数。它用给定的参数调用当前的脚本并返回结果。

19. SessionInterfaces?

19.1. Session API

参见

Transient Object API

19.2. SessionDataManagerErr?

在session数据管理者对象在操作中引发的错误。

例外可以在PythonScript中捕捉。导入的方式如下:

  from Products.Sessions import SessionDataManagerErr


19.3. class BrowserIdManagerInterface?

Zope Browser Id Manager 接口

一个Browser Id Manager负责给站点访问者分配id,用于给来自于相应的Session Data Manager的请求提供服务。

19.3.1. getBrowserId(self, create=1)

如果create=0,则返回当前浏览器id,或如果当前请求没有关联浏览器id,则返回None。如果create=1,则返回当前的浏览器id,或如果当前请求没有关联浏览器id,则创建一个新的浏览器id。常和getBrowserIdName一起使用,这样可方便的把browser-id-name和browser-id嵌入到form表单中。浏览器id是唯一的,它的长度、类型和组成可以更改。

所需许可: Access contents information

引发: 如果在REQUEST中发现不符合格式要求的id则引发BrowserIdManagerErr。

19.3.2. isBrowserIdFromCookie(self)

如果浏览器id来自于cookie则返回真。

所需许可: Access contents information

引发: 如果不存在当前的浏览器id则引发BrowserIdManagerErr。

19.3.3. isBrowserIdNew(self)

如果浏览器id是新的则返回真。当浏览器id第一次创建并且没有在任何请求中返回给服务器时,浏览器id是新的。

所需许可: Access contents information

引发: BrowserIdManagerErr?,条件是不存在当前的浏览器id。

19.3.4. encodeUrl(self, url)

用当前请求的浏览器id对url进行编码处理,并返回结果。例如:encodeUrl(http://foo.com/amethod)可以返回http://foo.com/amethod?_ZopeId=as9dfu0adfu0ad

所需许可: Access contents information

引发: BrowserIdManagerErr?. 条件是不存在当前浏览器id。

19.3.5. flushBrowserIdCookie(self)

从客户端浏览器删除cookie,条件是当且仅当使用了cookie浏览器id名称空间。

所需许可: Access contents information

引发: BrowserIdManagerErr?,条件是调用时cookie名称空间不是一个浏览器id名称空间。

19.3.6. getBrowserIdName(self)

返回带有cookie/form变量名称的字符串,这个字符串用于帮助当前浏览器id管理者对象取得浏览器id的数值。比如,_ZopeId?

所需许可: Access contents information

19.3.7. isBrowserIdFromForm(self)

如果浏览器id来自于表单变量则返回真。

所需许可: Access contents information

引发: BrowserIdManagerErr?,条件是不存在当前浏览器id。

19.3.8. hasBrowserId(self)

如果当前请求存在相应的浏览器id则返回真。

所需许可: Access contents information

19.3.9. setBrowserIdCookieByForce(self, bid)

其中bid为浏览器id,这个方法的功能是强制设置bid的cookie。

所需许可: Access contents information

引发: BrowserIdManagerErr?,条件是调用时cookies名称空间不是浏览器名称空间。

19.4. BrowserIdManagerErr?

这是在浏览器id管理者对象在操作时引发的错误。

例外可以在PythonScript中捕捉。导入的方式如下:

  from Products.Sessions import BrowserIdManagerErr


19.5. SessionDataManagerInterface?

Zope Session Data Manager 接口

Session Data Manager 负责维护Session Data 对象,并对与Session Data相关的请求提供服务。它还与Browser Id Manager一起来提供浏览器id信息。

19.5.1. getSessionDataByKey(self, key)

返回参数key所指定的Session Data Object。如果没有,则返回None。

所需许可: Access arbitrary user session data

19.5