提供者:Python世界:杜文山 (http://www.dohao.org/python)
这个文档描述了基础Zope对象集里的最常用接口。这些参考用于编写DTML、Perl和Python脚本,而这些脚本可以创建和操纵Zope对象。
这个接口需要由用户确认后返回的对象来提供支持,并且这个接口用于访问控制。
getUserName()
返回用户名称
l 许可——Always available(总是存在)
getId()
取得用户的ID。ID可以被用来(至少在Python中)从用户的UserDatabase中得到用户。
l 许可——Python only(只有Python)
getDatabasePath()
取得用户的UserDatabase中的物理路径。通过这个方法返回的路径,可以方便的用来取得用户数据库。
l 许可——Python only(只有Python)
hasRole(object, roles)
返回一个值,如果用户对于给定的对象拥有给定的角色,这个值才为真值,否则,它返回一个假值。
l 许可——Always available(总是存在)
getRoles()
返回用户在给定的object对象上的角色列表。
l 许可——Always available(总是存在)
一个DTML文档是一个包含和执行DTML代码的Zope对象。它用于呈现Web页面。
manage_edit(data,
title)
更改DTML文档,用data替换它的内容,用title更改它的标题。
data参数可以是一个文件对象或一个字符串。
l 许可——Change DTML documents(更改DTML文档)
document_src()
返回DTML文档的没有被呈递的源文本。
l 许可——View management screens(观看管理屏幕)
__call__(client=None,
REQUEST={}, RESPONSE=None, **kw)
调用一个DTML文档,从而引起文档执行其所包含的DTML代码。这个方法返回执行的结果,其可以是任何类型的对象。
要完成它的任务,DTML文档经常需要把各种名称解析成对象。例如,当代码<;dtml-var spam>;被执行时,DTML引擎试图解析名称spam。
要解析名称,文档必须被传递一个名称空间,在这个名称空间里查找这些名称。这个过程可以通过以下几种方式完成:
l 通过传递一个client对象——如果参数 client被传递,那么名称作为参数的属性来查找。
l 通过传递一个REQUEST映射——如果参数REQUEST被传递,那么名称作为参数的数据项来查找。如果对象不是一个映射,当视图查找一个名称时引发一个TypeError 错误。
l 通过传递关键字参数——名称和它们的值可以作为文档的关键字参数来被传递。
一个DTML文档所被赋予的名称空间是这三个方法的混合物。你可以传递任意数量的参数或者根本就不传递参数。名称首先在关键字参数中查找,然后在client里,最后在映射里。
一个DTML文档本身可以作为一个client参数来传递它自己,除了在指定的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)
当从Zope获取一个DTML文档的URL时,DTML文档通过出版者被调用。REQUEST对象作为文档的第二个参数被传递。
l 许可——View(观看).
get_size()
返回字节形式的未被呈递的DTML文档的源文本的大小。
l 许可——View(观看).
ObjectManager 构造器
manage_addDocument(id,
title)
给当前的ObjectManager添加一个DTML 文本。
DTML方法是一种Zope对象,它包含和执行DTML代码。它可以作为一个模板来显示其它的对象。它还可以存储一小段内容,这些内容可以被插入到其它的DTML文档或DTML方法里。
DTML方法的id 通过document_id变量提供,title通过document_title变量提供。
manage_edit(data,
title)
更改DTML方法,用data替换它的内容,更改它的title。data参数可以是一个文件对象或一个字符串。
l 许可——Change DTML methods(更改DTML方法)。
document_src()
返回DTML方法的未被呈递的源文本。
l 许可——View management screens(观看管理屏幕).
__call__(client=None,
REQUEST={}, **kw)
调用一个DTML方法会引起这个方法执行它所包含的DTML代码。这个方法返回执行的结果,结果可以是任何类型的对象。
DTML方法要完成它的任务,它需要把各种名称解析成对象。例如,当代码<;dtml-var spam>;被执行时,DTML引擎试图解析名称spam。
要解析名称,方法必须被传递一个名称空间,在这个名称空间里查找它们。这个过程可以通过以下用几种方式完成:
l 通过传递一个client对象——如果传递了参数client,那么名称作为参数的属性来查找。
l 通过传递一个REQUEST映射——如果传递了参数REQUEST,那么名称作为参数的数据项来查找。如果对象不是一个映射,当试图查找一个名称时引发一个TypeError错误。
l 通过传递关键字参数——名称和它们的值可以作为方法的关键字参数来传递。
一个DTML方法所被赋予的名称空间是这三个方法的混合物。你可以传递任何数量的参数或者根本就不传递。名称首先在关键字参数中查找,然后在client里,最后在映射里。
不像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)
当从Zope获取一个DTML方法的URL时,DTML方法通过出版者被调用。REQUEST对象作为方法的第二个参数被传递。
l 许可——View(观看)
get_size()
返回字节形式的未被呈递的DTML方法的源文本的大小。
l 许可——View(观看)
ObjectManager 构造器
manage_addDTMLMethod(id,
title)
给当前的ObjectManager添加一个DTML
方法。
DateTime对象提供了一种以各种格式处理日期和时间的接口。DateTime还提供了日历操作方法、日期和时间算法和格式化方法。
DateTime 对象表示时刻并且提供控制它的形式而又不影响对象绝对值的接口。
DateTime对象可以从形式多样的字符串或数字数据来创建,或者通过其它DateTime对象计算得到。DateTime可以把时间的格式转换成许多主要的时区的格式,还可以在一个给定时区的关联里创建DateTime对象。
DateTime对象提供一部分数字行为:
l 两个DateTime对象可以相减,从而获得两者间的时间差。
l 一个DateTime对象和一个正的或负的数字可以相加,从而获得一个新DateTime对象,它是晚于输入的DateTime对象的某一天。
l 一个正的或负的数字和一个DateTime对象可以相加,从而获得一个新DateTime对象,它是晚于输入的DateTime对象的某一天。
l 一个正的或负的数字可以从一个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个参数。
l 如果采用不带参数的方式调用函数,那么返回当前的日期或时间并且按照本地时区表示。
l 如果采用带有一个字符串参数的方式调用函数,其中这个字符串代表时区名称,那么返回表示当前时间的对象并且按照指定的时区表示。
l 如果采用带有唯一的字符串参数的方式调用函数,其中字符串表示一个有效的date/time,那么就返回一个表示那个date/time的对象。作为一个普遍的惯例,任何北美居民可以明确识别的date/time形式都是可接受的。(其中的原因是:在北美,像2/1/1994这样的日期被认为是February 1, 1994,然而在世界上的一些地方,它被认为是January 2, 1994。)一个date/time对象包含两个组件:一个日期组件和一个可选的时间组件,由一个或多个空格分隔。如果时间组件被忽略,则假定为12:00am。时区名称可以作为date/time字符串最后一个元素被指定,任何可以被识别的时区名称被用于计算date/time值。(如果你用字符串Mar 9, 1997 1:45pm US/Pacific 创建一个DateTime对象,它的值在本质上等同于你在一台属于那个时区的机器上在指定的日期和时间time.time()所捕捉的时间):
e=DateTime("US/Eastern”)
# 返回当前的date/time对象, 以US/Eastern时区表示。
x=DateTime(“1997/3/9 1:45pm”)
# 返回指定的时间,以本地时区表示。
y=DateTime("
# y 等于x
date组件由年、月和日的值组成。年的值必须为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小时制。
l 如果DateTime函数被调用时带有一个数字参数,这个数字被假定为浮点数值,例如由time.time()返回的值。返回的DateTime对象显示了用本地时区表示的time.time()的gmt值的浮点数。
l 如果函数调用时带有两个数字参数,那么第一个被认为是一个整数年,第二个参数被认为是在本地时区关联中本年开始以来的天数偏移量。返回的date/time值是用本地时区表示的给定年份开始以来的天数的给定偏移量。偏移量可以是正数或负数。两位数的年被假定为20世纪当中的年份。
l 如果函数调用时带有两个参数——第一个以浮点数形式提供的参数表示了在GMT里新纪元以来的秒数,就像那些由time.time()返回的数字,第二个以字符串形式提供的参数指定一个可识别的时区。返回具有GMT时间值的DateTime对象并按照给定时区形式表示。
import
time
t=time.time()
now_east=DateTime(t,’US/Eastern’)
# 时间按照US/Eastern时区表示
now_west=DateTime(t,’US/Pacific’)
# 时间按照US/Pacific时区表示
# now_east == now_west
# 只是它们的表示法是不同的
l 如果函数调用时带有三个或更多的数字参数,那么第一个被认为是整数年,第二个被认为是整数月,第三个被认为是整数天。如果结合在一起的值无效,那么引发一个DateTimeError。两位数的年被认为是20世纪中的年份。第4、5、6个参数分别指定小时、分钟和秒——小时和分钟应该为正整数,秒应该为一个正的浮点数——所有这些如果没有给定则默认为0。可以给定一个可选择的字符串,从而作为最后一个参数来表示时区(这个效果就好像是你已经在一台位于指定时区中的机器上选定了time.time()的值。)
如果传递给DateTime构造器的字符串参数不能被解析,它引发一个DateTime.SyntaxError错误。无效的日期、时间或时区组件引发一个DateTime.DateTimeError 错误。
模块函数Timezones() 返回一个DateTime模块可识别的时区列表。时区名称识别是不区分大小写的。
strftime(format)
返回按照format格式提供的date/time字符串。
见 Python中的 time.strftime (http://www.python.org/doc/current/lib/module-time.html) 函数。
dow()
返回整数型的星期的天数,星期日是0。
l 许可——Always available(总是存在)
aCommon()
l 许可——Always available(总是存在)
h_12()
返回12小时制的小时数。
l 许可——Always available(总是存在)
Mon_()
兼容性:见pMonth。
l 许可——Always available(总是存在)
HTML4()
按照符合HTML 4.0规范的格式返回对象,这个规范是ISO8601标准之一。
有关更多的信息,请见HTML 4.0规范(http://www.w3.org/TR/NOTE-datetime)。
日期输出格式为:YYYY-MM-DDTHH:MM:SSZ,其中T和Z是文本字符。时间为UTC(通用协调时间)时间。
l 许可——Always available(总是存在)
greaterThanEqualTo(t)
和其它DateTime对象或浮点数比较DateTime对象,比如由Python 的time 模块返回的数值。如果对象表示一个大于或等于指定的DateTime或time 模块风格的时间的date/time对象,则返回真。通过比较长整数型的毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
dayOfYear()
返回按照对象所在时区表示的年的天数。
l 许可——Always available(总是存在)
lessThan(t)
与其它的DateTime对象或一个浮点数比较DateTime对象,比如由Pythontime 模块返回的数字。如果对象表示一个小于指定的DateTime或time 模块风格的时间的date/time对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
AMPM()
返回一个对象的最接近秒的时间字符串。
l 许可——Always available(总是存在)
isCurrentHour()
如果这个对象在所在时区中表示一个属于当前小时范围里的date/time对象,则返回真。
l 许可——Always available(总是存在)
Month()
返回完整的月份的名称。
l 许可——Always available(总是存在)
mm()
以两位数字符形式返回月份。
l 许可——Always available(总是存在)
ampm()
返回适当的时间修饰语(am或pm)。
l 许可——Always available(总是存在)
hour()
返回以24小时制表示的小时。
l 许可——Always available(总是存在)
aCommonZ()
返回以Mar 1, 1997 1:45 pm US/Eastern格式表示的对象值的字符串。
.
l 许可——Always available(总是存在)
Day_()
兼容性:见pDay。
l 许可——Always available(总是存在)
pCommon()
返回以Mar. 1, 1997 1:45 pm 格式表示的对象值的字符串。
l 许可——Always available(总是存在)
minute()
返回分钟。
l 许可——Always available(总是存在)
day()
返回以整数表示的天。
l 许可——Always available(总是存在)
earliestTime()
返回一个新的表示最早可能时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天里边。
l 许可——Always available(总是存在)
Date()
返回对象的日期字符串。
l 许可——Always available(总是存在)
Time()
返回对象的最接近秒的时间字符串。
l 许可——Always available(总是存在)
isFuture()
如果这个对象表示一个晚于调用时间的date/time对象,则返回真。
l 许可——Always available(总是存在)
greaterThan(t)
和其它的DateTime对象或一个浮点数比较DateTime对象,比如由Pythontime 模块返回的数字。如果对象表示一个大于指定的DateTime或符合time 模块风格的时间的date/time对象,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
TimeMinutes()
返回对象的时间字符串,不显示秒。
l 许可——Always available(总是存在)
yy()
返回以两位数字符表示的日历年。
l 许可——Always available(总是存在)
isCurrentDay()
如果对象在所在时区中表示一个属于当前天范围内的date/time对象,则返回真。
l 许可——Always available(总是存在)
dd()
返回以两位数字符形式表示的天。
l 许可——Always available(总是存在)
rfc822()
返回以RFC 822格式显示的日期。
l 许可——Always available(总是存在)
isLeapYear()
如果当前年(在对象所属时区中)是闰年则返回真
l 许可——Always available(总是存在)
fCommon()
返回一个以March 1, 1997 1:45 pm格式表示的对象值的字符串。
l 许可——Always available(总是存在)
isPast()
如果对象表示一个早于调用时间的date/time对象,则返回真。
l 许可——Always available(总是存在)
fCommonZ()
返回一个以March 1, 1997 1:45 pm格式表示的对象值的字符串。
l 许可——Always available(总是存在)
timeTime()
返回UTC中按照Python time模块所使用的格式以浮点数形式表示的date/time 。注意,采用那些拥有对于time模块来说没有含义的值的DateTime来创建date/time是可能的。
l 许可——Always available(总是存在)
toZone(z)
返回当前对象在指定的z时区中时的DateTime 。
l 许可——Always available(总是存在)
lessThanEqualTo(t)
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如由Python time模块返回的数字。如果对象表示一个小于或等于指定的DateTime或time模块风格的时间的date/time,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
Mon()
兼容性:参见aMonth。
l 许可——Always available(总是存在)
parts()
返回包含对象的日历年、月、日、小时、分钟、秒和时区值的元组。
l 许可——Always available(总是存在)
isCurrentYear()
如果这个对象在所属时区中表示一个属于当前年范围以内的date/time对象,则返回真。
l 许可——Always available(总是存在)
PreciseAMPM()
返回对象的时间字符串。
l 许可——Always available(总是存在)
AMPMMinutes()
返回对象的时间字符串,不显示秒。
l 许可——Always available(总是存在)
equalTo(t)
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如由Python time模块返回的数字。如果对象表示一个等于指定的DateTime或time模块风格时间的date/time,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
pDay()
返回星期的简短名称(带有句点)。
l 许可——Always available(总是存在)
notEqualTo(t)
和另外一个DateTime对象或一个浮点数比较DateTime对象,比如由Python time模块返回的数字。如果对象表示一个不等于指定的DateTime或time模块风格时间的date/time,则返回真。通过比较长整数型毫秒,它可以给出更为精确的结果。
l 许可——Always available(总是存在)
h_24()
返回24小时制的小时。
l 许可——Always available(总是存在)
pCommonZ()
返回以Mar. 1, 1997 1:45 pm US/Eastern格式表示的对象值的字符串。
l 许可——Always available(总是存在)
isCurrentMonth()
如果对象在所属的时区中表示一个属于当前月范围以内的date/time对象,则返回真。
l 许可——Always available(总是存在)
DayOfWeek()
兼容性:参见aDay。
l 许可——Always available(总是存在)
latestTime()
返回一个新的表示最迟可能时间(全部按秒计算)的DateTime对象,它仍然属于对象所在时区中的当前天范围。
l 许可——Always available(总是存在)
dow_1()
返回以整数表示的星期的天数,星期日为1。
l 许可——Always available(总是存在)
timezone()
返回对象的所属时区。
l 许可——Always available(总是存在)
year()
返回对象的日历年。
l 许可——Always available(总是存在)
PreciseTime()
返回对象的时间字符串。
l 许可——Always available(总是存在)
ISO()
l 许可——Always available(总是存在)
millis()
返回自从GMT新纪元以来的毫秒数。
l 许可——Always available(总是存在)
second()
返回秒
l 许可——Always available(总是存在)
month()
返回以整数表示的对象的月份。
l 许可——Always available(总是存在)
pMonth()
返回简写(带有句点)的月份名称。
l 许可——Always available(总是存在)
aMonth()
返回简写的月份名称。
l 许可——Always available(总是存在)
isCurrentMinute()
如果对象在所属时区中表示一个属于当前分钟范围以内的date/time对象,则返回真。
l 许可——Always available(总是存在)
Day()
返回星期中天的完整名称。
l 许可——Always available(总是存在)
aDay()
返回星期中天的简写名称。
l 许可——Always available(总是存在)
Web可调用函数,它们封装外部Python函数。
函数在一个外部文件里被定义。可以把这个文件看成是模块,但是它不是一个模块。它不是直接被导入,而是被读入和求值。这个文件必须位于Zope安装目录中的Extensions子目录里,或者在一个产品目录的Extensions子目录里。
当前还不能导入位于Extensions目录中的Python模块,这应归于外部方法装载的方式。导入那些在Zope安装目录中的lib/python目录里发现的模块是可能的,或者是导入那些位于lib/python目录中的软件包里的模块。
manage_edit(title,
module, function, REQUEST=None)
更改外部方法。
见manage_addExternalMethod中的参数模块和函数的描述。
注意,调用manage_edit 引起模块被有效地重新载入。这对于在调试期间查看更改的效果来说是有用的,但是对于那些依赖被共享的全局数据的函数来说,它会导致问题。
__call__(*args,
**kw)
调用外部方法。
调用一个外部方法大致等同于用Python调用原始函数。位置和关键字参数像通常那样传递。注意,它不象通常的Python方法那样——self参数必须明确的被传递。如果属于以下情况,根据这个原则,如果属于以下情况,会导致一个例外:
l 提供的参数数量少于必需的参数数量。
l 函数的第一个参数的名称是self。
在这种情况下,第一个参数使用对象的上级URL。
ObjectManager 构造器
manage_addExternalMethod(id,
title, module, function)
给一个ObjectManager添加一个外部方法。除了标准的用于创建对象的参数id 和 title外,还定义了以下的参数:
l function——Python函数的名称。它可以是一个普通的Python函数或是一个被绑定的方法。
l module——包含函数的定义的文件名称。
模块通常位于Extensions目录,然而,文件名可以拥有一个产品前缀,用以显示它可以在一个产品目录里被找到。
例如,如果模块是ACMEWidgets.foo,那么就可以试试使用文件lib/python/Products/ACMEWidgets/Extensions/foo.py。如果失败了,那么就使用文件Extensions/ACMEWidgets.foo.py
文件是一种包含文件内容的Zope对象。通过Zope,一个文件对象可以被用来上载或下载文件信息。
在Zope里使用一个文件对象是容易的。最普通的用法是在一个Web页面里显示一个文件对象的内容。
<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方法的细节。
getSize()
返回字节形式的文件大小。
l 许可——View(观看)
update_data(data,
content_type=None, size=None)
用data更新文件的内容。
data参数必须为一个字符串。如果content_type没有提供,那么就不设置内容类型。如果没有提供size,那么文件的大小就从data中计算。
l 许可——Python only(只有Python)
getContentType()
返回文件的内容类型。
l 许可——View(观看)
ObjectManager构造器
manage_addFile(id,
file="", title="", precondition="",
content_type="")
添加一个新文件对象。
采用file文件内容创建一个新文件对象id。
文件夹是Zope中的一种通用容器对象。
文件夹是Zope里最常见的ObjectManager 子类。
ObjectManage 构造器
manage_addFolder(id,
title)
给当前的ObjectManager添加一个文件夹。
l 许可——Add Folders
Image是一种包含图像内容的Zope对象。通过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)”>
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标记符。
l 许可——View(观看).
ObjectManager构造器
manage_addImage(id,
file, title="", precondition="", content_type="")
添加一个新Image对象。
用file文件内容创建一个新Image对象id。
MailHost(邮件主机)对象用作简单邮件传输协议(SMTP)服务器的适配器。MailHost被用来通过DTML sendmail 标记符查找适合发送邮件的主机。
send(messageText, mto=None, mfrom=None, subject=None, encode=None)
发送一个电子邮件消息,参数为:
l messageText——邮件消息的正文。
l mto——消息接受者字符串或列表。
l mfrom——消息发送者的地址。
l subject——消息的主题。
l encode——rfc822定义的消息编码。默认为None,则意味着没有进行编码。有效的值为base64、 quoted-printable 和uuencode 。
ObjectManager 构造器
manage_addMailHost(id,
title="", smtp_host=None, localhost=localhost, smtp_port=25,
timeout=1.0)
给一个ObjectManager添加一个MailHost对象。
ObjectManager包含其它的Zope对象。被包含的对象是ObjectManagerItems 。
要在一个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文档里都应该有注解。
objectItems(type=None)
这个方法返回(id,object)元组序列。
就像objectValues 和 objectIds,它接受一个参数,或者为字符串,或者为一个列表,从而对一个给定meta_type或meta_types集合的对象限制结果。
每个元组的第一个元素是包含在ObjectManager中的对象的id,第二个元素是对象本身。
例子:
<dtml-in
objectItems>
id: <dtml-var sequence-key>,
type: <dtml-var meta_type>
<dtml-else>
There are no sub-objects.
</dtml-in>
l 许可——Access contents information(访问内容信息)。
superValues(type)
这个方法返回一个包含在ObjectManager和所有它的双亲ObjectManager里的给定meta_type的对象列表。
type参数指定meta_type。它可以是一个字符串,从而指定一个meta_type,或者它可以是一个字符串列表,用来指定多个meta_type。
l 许可——Python only(只有Python)
objectValues(type=None)
这个方法返回一个所被包含的对象序列。
就像objectItems 和 objectIds,它接受一个参数,或者为字符串,或者为一个列表,从而对一个给定meta_type或meta_types集合的对象限制结果。
例子:
<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来限制文件夹的结果。
l 许可——Access contents information(访问内容信息)
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 。
l 许可——Access contents information(访问内容信息)。
Zope对象可以被包含在ObjectManager里。几乎所有的可以通过Web管理的Zope对象都是ObjectManagerItem 。
ObjectManagerItem有这些实例属性:
l title——对象的标题。这是一行描述对象的可选的字符串。
l meta_type——对象类型的简短名称。这是显示在产品添加列表里的对象的名称,并且用在按照类型过滤对象的时候。这个属性由对象的类提供并且不应该直接来更改。
l REQUEST——当前Web请求,这个对象自动获得,不需要设置。
getId()
返回对象的id。
id是对象在它的双亲ObjectManager中的唯一名称。它应该为一个字符串,并且它可以包含字母、数字、下划线、箭号、逗号和空格。
这个方法替代直接存储id属性。
l 许可——Always available(总是存在)
title_or_id()
如果title不为空,它返回标题;否则,它返回id。
l 许可——Always available(总是存在)
unrestrictedTraverse(path, default=None)
返回通过对象的给定path路径所获得的对象,方法在这些对象上被调用。这个方法不受限制,这是因为几乎没有执行安全检查。
如果对象没有被找到,那么返回默认的参数。
l 许可——Python only(只有Python)
absolute_url(relative=None)
返回对象的绝对URL。
如果提供的relative参数为true,那么返回的URL相对于站点对象。注意,如果使用虚拟主机,那么返回的路径是一个逻辑路径而不是一个物理路径。
l 许可——Always available(总是存在)
this()
返回当前对象。
它在两种情况中比较方便。第一,它提供一种在DTML表达式里指向一个对象的方式。
它的第二个用法是相当深奥的。它提供一种获取一个对象而不从它被获取的地方得到完整的关联。这是有用的,例如,你位于一个数据项方法的非数据项子对象里,你需要得到位于子对象的关联的外面的数据项。
l 许可——Always available(总是存在)
manage_workspace()
当一个用户在一个ObjectManager Contents视图或在Zope管理导航视图中选择一个数据项时调用这个Web方法。
l 许可——View management screens(观看管理屏幕).
title_and_id()
如果title不为空,它返回title,其后为用括号扩起来的id。否则,它返回id。
l 许可——Always available(总是存在)
getPhysicalPath()
从根取得对象的路径,忽略虚拟主机。
l 许可——Always available(总是存在)
getPhysicalRoot()
返回顶级Zope应用程序对象。
l 许可——Python only(只有Python)
restrictedTraverse(path, default=None)
返回通过对象的给定path路径所获得的对象,方法在这些对象上被调用,随时执行安全检查。
如果一个对象没有被找到,那么返回默认的参数。
l 许可——Always available(总是存在)
一个PropertyManager对象有一个键入的特征的集合,这些特征被称为属性。属性可以通过Web或DTML管理。
除了拥有类型,属性可以为可写或只读,并且它们可以有默认的值。
propertyItems()
返回(id,property)元组的列表。
l 许可——Access contents information(访问内容信息)
propertyValues()
返回属性值列表。
l 许可——Access contents information(访问内容信息)
propertyMap()
返回一个映射元组,为属性给出元数据,元数据包括id、 type 和 mode。
l 许可——Access contents information(访问内容信息)
propertyIds()
返回属性id的列表。
l 许可——Access contents information(访问内容信息)
getPropertyType(id)
取得属性id的类型。如果此属性不存在它返回None。
l 许可——Access contents information(访问内容信息)
getProperty(id, d=None)
.
返回属性id的值。如果属性没有被找到,返回可选的第二个参数或返回None。
l 许可——Access contents information(访问内容信息)
hasProperty(id)
如果PropertyManager有属性id,则返回一个元组值。否则,它返回一个假值。
l 许可——Access contents information(访问内容信息)
一个PropertySheet是一个用来组织和处理相关属性集的抽象。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet可以提供或不提供管理属性的Web界面。
xml_namespace()
返回一个名称空间字符串,对于这个属性集它可以被用作一个xml名称空间。如果对于一个给定属性单(特别是添加在ZClass定义里的属性单)没有默认的名称空间,它可以是一个空字符串。
l 许可——Python only(只有Python)
propertyItems()
返回一个(id, property)元组列表。
l 许可——Access contents information(访问内容信息)
propertyValues()
返回一个实际属性值的列表。
l 许可——Access contents information(访问内容信息)
getPropertyType(id)
取得属性id的类型。如果此属性不存在则返回None。
l 许可——Python only(只有Python)
propertyInfo()
返回一个包含属性元数据的映射。
l 许可——Python only(只有Python)
getProperty(id, d=None)
取得属性id,如果此属性没有被找到,返回可选的第二个参数或None。
l 许可——Python only(只有Python)
manage_delProperties(ids=None,
REQUEST=None)
按照给定的id删除一个或多个属性。id参数应该为一个包含要被删除的属性id的(元组或列表)序列。如果id为空,不进行操作。如果任何在id中指定的属性不存在,引发一个错误。一些对象有指定的属性,它们由作者定义,不能被删除。如果这些属性之一在id中被指定,返回一个HTML错误消息。
如果没有为REQUEST传递数值,该方法返回None。如果为REQUEST提供一个值(就像它通过Web被调用一样),呈递对象的属性管理表单,并返回这个表单。
这个方法可以通过Web使用DTML或Python代码来调用。
l 许可——Manage Properties(管理属性)。
manage_changeProperties(REQUEST=None,
**kw)
修改现有对象的属性,方式是通过REQUEST、包含name:value对或者传递name=value关键字参数传递一个映射对象。
一些对象拥有特殊的属性,它们由产品作者定义,并且不能被更改。如果你视图通过这个方法更改这些属性之一,就会引发一个错误。注意,当这个方法被调用时,没有类型检测或转换发生,因此确保被更新的值属于正确的类型是调用者的责任。如果为REQUEST提供了一个值(就像它通过Web被调用时那样),方法返回一个HTML消息对话框。如果没有传递REQUEST,方法成功时返回None。
这个方法可以通过Web使用DTML或Python代码来调用。
l 许可——Manage Properties(管理属性)。
manage_addProperty(id,
value, type, REQUEST=None)
用给定的id、value 和 type添加一个新属性。
这些属性类型是:
l boolean——1或0 。
l date——DateTime 值,例如12/31/1999 15:42:52 PST。
l float——小数,例如12.4。
l int——整数,例如 12。
l lines——字符串列表,每行一个。
l long——长整数,例如12232322322323232323423。
l string——字符串,例如 This is a string。
l text——多行的字符串,例如一个段落。
l tokens——用空格分隔的字符串列表,例如one two three 。
l selection——用一个下拉菜单选择的字符串。
l multiple selection——用一个选择列表选择的字符串列表。
这个方法使用传入的type试图把参数值转换成指定的类型。如果给定的value不能被转换 ,就引发一个ValueError错误。
对selection 型和 multiple selection型属性所赋予的值可以是一个特征或方法名称。属性或方法必须返回一个序列值。
如果给定的type不被识别,给定的value和type被对象简单的存储起来。
如果没有为REQUEST传入值,方法返回None。如果为REQUEST提供一个值(就像通过Web调用一样),那么呈递对象的属性管理表单,并返回这个表单。
这个方法可以通过Web使用DTML或Python代码来调用。
l 许可——Manage Properties(管理属性)。
propertyMap()
返回一个映射元组,为属性提供元数据。
l 许可——Python only(只有Python)
propertyIds()
返回属性id的列表。
l 许可——Access contents information(访问内容信息)
hasProperty(id)
如果self有一个给定id的属性,则返回真;否则,它返回假。
l 许可——Access contents information(访问内容信息)
PropertySheet是一种用于组织和处理相关属性集的抽象。在概念上,它就像一个容器,其中包含了相关的属性和描述那些属性的元数据的集合。PropertySheet对象通过一个PropertySheets对象访问,它充当一个PropertySheet实例集合。
支持PropertySheets的对象(支持PropertyManager接口或者ZClass对象的对象)有一个PropertySheets属性(一个PropertySheets实例),它是PropertySheet对象的集合。PropertySheets对象提供一个接口,非常像一个Python映射,因此单独的PropertySheet对象就可以通过字典风格的键索引来访问。
get(name, default=None)
返回按照name区分的PropertySheet,或者,如果指定的PropertySheet没有被找到,则返回默认给定的值。
l 许可——Python only(只有Python)
values()
返回一个集合里的所有PropertySheet对象的序列
l 许可——Python only(只有Python)
items()
返回一个序列,它包含集合里的每个PropertySheet对象的(id, object)元组。
l 许可——Python only(只有Python)
Python脚本包含Python代码,它通过以下方式执行:
l 通过Web调用脚本,方式是使用一个Web浏览器访问它的位置。
l 使用其它的脚本对象调用脚本。
l 使用一个方法对象调用脚本,例如一个DTML方法。
Python脚本可以包含一个Python语言的安全子集。Python脚本必须是安全的,这是因为众多不同的用户可以潜在的通过不安全的媒介编辑它们,例如通过Web这种媒介。以下的安全考虑促成了对安全Python脚本的需要:
l 因为许多用户可以使用Zope,一个Python脚本必须确保它不能使一个用户做他们不允许做的事情,例如删除一个他们没有权限删除的对象。为了满足这个要求,Python脚本在执行的过程中进行许多安全检测。
l 因为Python脚本可以通过不安全的Web媒介来编辑,它们不允许访问Zope服务器的文件系统。这样,通常的Python内建方法,例如像open这样的方法就不被允许。
l 因为许多标准的模块不受以上两个安全要求的限制,只有Python模块中的一个小子集可以用import语句导入到Python脚本中来,除非它们已经通过Zope的安全策略的验证。当前,以下标准的Python模块已经通过验证:
n string
n math
n whrandom 和random
n Products.PythonScripts.standard
l 因为Python的exec语句可以使你执行任何Python代码,所以它在Python方法中不被允许。
l 因为一些Python内建函数可能引发安全问题,所以它们不被允许。以下Python内建函数是不被允许的:
n open
n input
n raw_input
n eval
n execfile
n compile
n type
n coerce
n intern
n dir
n globals
n locals
n vars
n buffer
n reduce
l 其它的内建函数在本质上是受到限制的。以下内建函数受到限制:
n range——由于可能导致内存拒绝服务攻击,内建的range函数的创建的范围被限制在小于10,000个元素长度。
n filter, map, tuple, list——出于相同的原因,用来从序列构造列表的内建函数不可以操作字符串。
n getattr, setattr, delattr——因为这些可以使Python代码避开Zope的安全系统,它们被替换成定制的、安全限制的版本。
l 为了和DTML中的Python表达式相一致,这些内建的函数被扩充有少量的函数和类:
n test
n namespace
n render
n same_type
n DateTime
l 因为print语句不能在Zope中像通常那样操作,它的效果已经变了。不是把文本发送到stdout, print而是扩展一个内部变量。这个特殊的内建函数对所有在当前脚本执行期间打印的文本进行串连求值。
document_src(REQUEST=None,
RESPONSE=None)
返回read方法执行后的文本,并且把RESPONSE的内容类型设置为text/plain。
ZPythonScript_edit(params, body)
更改脚本的参数和正文。这个方法接受两个参数:
l params——Python脚本的参数的新值。必须为一个用逗号分隔的数值列表,并且符合有效的Python函数的署名句法。如果它不含有一个有效的署名字符串,就引发一个SyntaxError错误。
l body——Python脚本正文的新值。它必须符合有效的Python句法。如果它不符合有效的Python句法,就引发一个SyntaxError错误。
ZScriptHTML_tryParams()
返回一个测试脚本所必需的参数的列表。
read()
返回Python脚本的正文,前面放置一个特殊的注释块。这个块含有元数据,这些元数据按照write方法所希望的那样以注释行的形式提供。
write(text)
通过把文本参数分解成组块来更改脚本。行最前边的##符号被删去,并且如果它们符合##name=value格式,它们就被用来设置元数据,例如标题和参数。剩下的文本被设置为Python脚本的正文。
ZPythonScriptHTML_editAction(REQUEST,
title, params, body)
更改脚本的主要参数。这个方法接受以下参数:
l REQUEST——当前请求。
l title——Python脚本标题的新值。它必须为一个字符串。
l params——Python脚本参数的新值。必须为一个用逗号分隔的数值列表,并且符合有效的Python函数的署名句法。如果它含有一个有效的署名字符串,就引发一个SyntaxError错误。
l body——Python脚本正文的新值。它必须符合有效的Python句法。如果它符合有效的Python句法,就引发一个SyntaxError错误。
ZPythonScriptHTML_upload(REQUEST,
file="")
在文件里给write方法传递文本。
ZPythonScript_setTitle(title)
更改脚本的标题。这个方法接受一个title参数,它是脚本标题的新值,并且必须为字符串。
ObjectManager 构造器
manage_addPythonScript(id,
REQUEST=None)
给一个文件夹添加一个Python脚本。
REQUEST对象封装所有与当前Zope里的请求有关的信息。这包括输入报头、表单数据、服务器数据和cookies。
REQUEST对象是一种映射对象,它表示一个变量与值的映射集合。另外,变量被分成四个类别:
l Environment variables(环境变量)——这些变量包括输入报头、服务器数据和其它与请求有关的数据。变量名称就像CGI规范中的那样。
l Form data(表单数据)——如果提供了这种数据,那么这些数据是从被编码的URL查询字符串或正文中提取的数据。
l CookiesThese——如果提供了这种数据,那么这些数据是cookie数据。
l OtherData——这些数据是可以由应用程序对象设置的数据。
REQUEST 对象可以被用作一个映射对象,其中,值按照以下顺序查找:环境变量,其它变量,表单数据, cookies。
以下在REQUEST里设置了以下特殊变量:
l PARENTS——这是一个可以直接得到的被公布的对象的列表。因此,PARENTS[0]将是被公布的对象的祖先。
l REQUEST——REQUEST对象。
l RESPONSE——response对象
l PUBLISHED——这是实际被公布的对象,它是直接调用URL所产生的结果。
l URL——REQUEST的URL,不包括查询字符串。
l URLn——URL0等同于URL,URL1等同于URL0删除最后的路径元素,URL2等同于URL1删除最后的元素,依此类推。例如,如果URL=http://localhost/foo/bar,那么URL1=http://localhost/foo,URL2=http://localhost.。
l URLPATHn——URLPATH0是URL的路径部分,URLPATH1是URL1的路径部分,依此类推。例如,如果URL=http://localhost/foo/bar,那么URLPATH1=/foo , URLPATH2=/ 。
l 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 。
l 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 。
get_header(name,
default=None)
返回指定的HTTP报头,或者一个可选的默认参数,或者如果报头未找到返回None。注意原始的名称和开头不带HTTP_ 的CGI报头名称都可以识别。例如,若是提供的话,Content-Type, CONTENT_TYPE 和 HTTP_CONTENT_TYPE都将返回Content-Type报头。
l 许可——Always available(总是存在)
items()
针对REQUEST对象里的所有键返回(key, value)元组序列。
l 许可——Always available(总是存在)
keys()
返回REQUEST对象里的所有键被排序后形成的序列。
l 许可——Always available(总是存在)
setVirtualRoot(path, hard=0)
改变URL、URLn、URLPATHn、BASEn、BASEPATHn和absolute_url(),这样当前的对象拥有路径path。如果hard为真,那么PARENTS被清空。
它提供了虚拟主机支持。它可以通过URL来调用。
l 许可——Always available(总是存在)
values()
针对REQUEST对象里的所有键返回值的序列。
l 许可——Always available(总是存在)
set(name, value)
在REQUEST对象里创建一个新名称并给它分配一个值。这个名称和值被存储在Other类别里。
l 许可——Always available(总是存在)
has_key(key)
如果REQUEST对象包含key,则返回真,否则返回假值。
l 许可——Always available(总是存在)
setServerURL(protocol=None, hostname=None, port=None)
设置被指定的SERVER_URL元素,它还影响URL、URLn、BASEn 和 absolute_url()。
它提供虚拟主机支持。
l 许可——Always available(总是存在)
Response对象表示对一个Zope请求所做出的响应。
setStatus(status, reason=None)
设置相应的HTTP状态代码;参数可以是一个整数或者是以下字符串之一,它们把字符串转换成对应的整数值:OK、Created、Accepted、NoContent、MovedPermanently、 MovedTemporarily、NotModified、BadRequest、Unauthorized、Forbidden、NotFound、InternalError、NotImplemented、BadGateway 和 ServiceUnavailable。
l 许可——Always available(总是存在)
setHeader(name, value)
设定一个HTTP返回的报头,让其中的name的值为value,如果已经存在了,则清除此报头以前设定的值。如果文字标记为真,那么报头名称的大小写被保留;否则,在输出中对报头名称进行单词大写处理。
l 许可——Always available(总是存在)
redirect(location, lock=0)
引起一个重定向而不引发一个错误。如果lock关键字参数被传递一个真值,那么不改变HTTP重定向响应代码,即使以后在处理请求的过程中发生了一个错误(当redirect()已经被调用以后)。
l 许可——Always available(总是存在)
setCookie(name, value, **kw)
在浏览器上设置一个HTTP cookie。
响应包括一个HTTP报头,它在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。这会用Response对象里的cookie值覆盖任何以前设定的值。
l 许可——Always available(总是存在)
write(data)
以流的形式返回dada。
HTML数据可以通过使用一种面向流的接口而被返回。这使得浏览器在处理响应计算的同时显示部分结果。
被公布的对象首先应该对响应对象设置输出报头或cookies。
注意,被公布的对象在开始面向流输出后必须不生成任何错误。
l 许可——Always available(总是存在)
expireCookie(name, **kw)
导致从浏览器中删除一个HTTP cookie。
响应包括一个HTTP报头,如果已经存在一个cookie,它删除相应于客户端上的"name”的cookie。完成的方式是通过发送一个包含有终止日期的新cookie。注意,一些客户端需要指定一个路径——这个路径必须完全符合创建cookie时所给定的路径。这个路径可以作为一个关键字参数来指定。
l 许可——Always available(总是存在)
appendCookie(name, value)
返回一个HTTP报头,它在一个支持cookie的浏览器上设置一个cookie,键为name,值为value。如果cookie的值以前已经在Response对象里设置过了,那么新的值被附加在旧的后边,用一个冒号分隔。
l 许可——Always available(总是存在)
addHeader(name, value)
使用给定的值设置一个新HTTP 返回报头,同时保持以前相同名称的任何设置好的报头。
l 许可——Always available(总是存在)
appendHeader(name, value, delimiter=,)
给cookie附加一个值。
用value值设置一个HTTP返回报头名称,如果这个报头存在一个以前设置的值,那么它被附加在后边,用逗号隔开。
l 许可——Always available(总是存在)
setBase(base)
给被返回的文档设置基URL。
l 许可——Always available(总是存在)
Web可调用的基于脚本的接口
ZScriptHTML_tryAction(REQUEST,
argvars)
应用由字典argvars提供的测试参数。它用给定的参数调用当前的脚本并返回结果。
Vocabulary为文本索引管理单词和语言规则。文本索引是通过Zcatalog和其他第三方产品来完成的。
words()
返回一个单词列表。
insert(word)
在Vocabulary里插入一个单词。
query(pattern)
查询Vocabulary,搜索符合pattern模式的单词。
ObjectManager 构造器
manage_addVocabulary(id,
title, globbing=None, REQUEST=None)
给一个ObjectManager添加一个Vocabulary对象。
Zcatalog对象
一个Zcatalog包含任意的索引,比如对Zope对象参考。Zcatalog可以把对象的Field值、Text值或者KeyWord值编入索引:
Zcatalogs有三种类型的索引:
l Text(文本)——文本索引对文本内容编制索引。这种索引可以用来搜索包含某个单词的对象。
l Field(字段)——字段索引对细微的值编制索引。这种索引可以被用来搜索含有某种属性的对象。
l Keyword(关键字)——关键字索引对值序列编制索引。这种索引可以被用来搜索匹配一个或多个搜索条件的对象。
Zcatalog可以包含一个特殊的数据表,这个数据表与被目录化的对象有关。这个信息可以被用在搜索结果页面方面,从而显示搜索结果信息。
元数据表结构被用来为ZCatalog Result对象构建结构。对象和元数据表列一样有相同的属性。
Zcatalog不存储对象本身的引用而是存储对象唯一的标识符,这个标识符定义了如何得到对象。在Zope里,这个唯一的标识符是对象的相对于Zcatalog的路径(因为两个Zope对象不能有相同的URL,这是Zope里的极好的唯一标识符)。
schema()
返回相应于元数据表列的名称序列。
__call__(REQUEST=None,
**kw)
搜索目录册,采用的方式和searchResults相同。
uncatalog_object(uid)
从目录册中移出具有唯一标识符uid的对象。
getobject(rid, REQUEST=None)
返回一个被目录化的对象,其id为data_record_id_ 。
indexes()
返回一个相应于索引的名称序列。
getpath(rid)
返回要被目录化的对象的路径,其id为data_record_id_。
index_objects()
返回一个实际索引对象的序列。
searchResults(REQUEST=None, **kw)
搜索目录册。搜索条件可以在REQUEST里传递或者作为关键字参数传递。
搜索查询由一个映射组成,其中在索引名称和搜索参数之间建立映射。你可以通过REQUEST变量给searchResults传递一个映射,或者你通过把索引名称和搜索参数作为关键字参数传递给方法,换句话说:
searchResults(title=‘Elvis
Exposed’,
author=‘The Great Elvonso’)
等同于:
searchResults({‘title’
: ‘Elvis Exposed’,
author : ‘The Great Elvonso’})
在这些例子里,title和author是索引。这个查询返回title为Elvis Exposed同时由The Great Elvonso编著的任何对象。那些在一个searchResults()调用里作为键和值被传递的条件不明显的被合并在一起。要"OR”两个搜索结果,调用searchResults()两次,并且像这样连接结果:
results
= ( searchResults(title=’Elvis Exposed’) +
searchResults(author=’The Great Elvonso’) )
这样就返回所有的含有指定的title或者指定的author的对象
你可以传递一些指定的索引名称来更改搜索查询的行为:
l sort_on——这个参数指定用那个索引对结果排序。
l sort_order——你可以指定相反或递减。默认的行为是向上排序。
当查询这个方法时要注意一些规则:
l 一个空的查询映射(或一个伪REQUEST)返回所有目录册里的数据项。
l 通过一个查询所得到的结果只涉及Field/Keyword索引,例如,{‘id’:’foo’},没有返回未排序的sort_on。
l 通过一个复杂查询所得到的结果涉及一个Field/Keyword索引和一个Text索引,例如,{‘id’:’foo’,’PrincipiaSearchSource’:’bar’},没有返回未排序的sort_on。
l 通过一个简单的Text索引查询所得到的结果,例如{'PrincipiaSearchSource’:'foo’},按照递减顺序返回。一个Text索引不能被用作一个sort_on参数,试图这样做时会引发一个错误。
根据你要查询的索引类型的不同,你可以提供更多的高级搜索参数,你可以指定搜索范围或使用通配符。
uniqueValuesFor(name)
返回对应于名为name的字段索引的唯一值。
catalog_object(obj,
uid)
用唯一的标识符uid把obj对象编进目录。
ObjectManager 构造器
manage_addZCatalog(id,
title, vocab_id=None)