奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 操作系统 >> Linux >> Mod_python 3.2.8中文手册
操作系统
Windows XP
Windows 2000
Windows Vista
Windows 2003
Windows 9x
DOS
Linux
Unix
  • Vista的优点与缺点

  • 64位Windows Vista性能

  • 快速恢复Windows XP管

  • 重装Windows系统不可忽

  • 关闭不需要服务 为Win

  • 优化你的宽带 提升Win

  • Mod_python 3.2.8中文手册
    字体:

    中华网络安全联盟    作者:未知    来源:转载    时间:2006-4-12

     


    4.6util-工具箱

    util模块提供了类似于cgi模块的多种实用工具。util模块的实现也是非常有效率的,直接调用Apache的API,并且通过环境变量传递信息。

    推荐的使用这个模块的方式:

    from mod_python import util

    参考CGI文档:

    http://CGI-spec.golux.com

    4.6.1FieldStorage类

    通过FieldStorage类传递数据,这个类类似于标准模块cgi FieldStorage。

    class FieldStorage(req[,keep_blank_values,strict_parsing])

    这个类提供了处理从客户端提交的HTML。req是mod_python请求对象的实例。

    可选参数keep_blank_values是一个标志选项,判定是否把从数据编码而得的URL中的空值作为空字符串处理。缺省值为False,代表忽略空值,好像他们没有出现过一样。

    可选参数strict_parsing还没有实现。

    初始化时,FieldStorage类读取所有从客户端提交的信息。当所有客户端信息处理完成时,只剩下一个对应一个请求的FieldStorage类的实例。你也可以尝试在FieldStorage实例化之前和之后访问客户端数据。

    从客户端读取的数据将会被转换成Field对象,每项数据一个字段。从HTML提交的输入类型file,将会被以临时文件的形式稍后提交成Field对象的file属性。

    FieldStorage类有一个映射对象接口,可以作为词典来处理。当使用映射时,键名是输入字段名,返回的词典值可能是如下的:

    StringField的实例,包含输入值。仅限输入一个值的时候。StringField是str的子类提供了value属性来兼容cgi模块。

    Field类的实例,如果输入是一个上传文件。

    StringField或者/和Field对象的列表。当输入多个值时,比如HTML标签<select>的元素。

    注意:不同于标准库cgi模块的FieldStorage类,一个Field对象只能返回上传文件。其他情况返回StringField的实例。这意味着不需要使用.value属性就可以存取字段值,在大多数时候。

    除了普通的映射对象方法(指词典),FieldStorage对象还有如下属性:

    list

    这是Field对象的列表,对应每个输入。如果具有同名的多个输入,则列表中也会拥有多个对象。

    FieldStorage类的方法:

    getfirst(name[,default])

    总是返回表单数据名name的一个值。如果没有对应的字段则返回default指定的值。缺省返回None如果未指定default。

    getlist(name)

    返回表单字段name的值列表。如果没有对应字段则返回空列表。即使只有一个值也会返回包含这个值的列表。

    4.6.2Field类

    class Field()

    这个类用于FieldStorage的内部实现。每个Field类实例对应一个HTML表单的输入。

    Field实例包含如下属性:

    name

    输入名

    value

    输入值。这个属性用于读取数据上传文件的数据。但是注意处理大文件,因为整个文件都会被读入内存。

    file

    类似文件对象,指向上传的临时文件TemporaryFile实例。(更多信息参考python标准tempfile模块中的TemporaryFile类)

    简单的来说,它是一个StringIO对象,所以你可以使用这个属性读取字符串值来更好的代替value属性。

    filename

    客户端提供的文件名。

    type

    客户端提交的content-type内容类型。

    type_options

    真实的内容类型,从客户端提交头的content-type提供的。这是一个词典。

    disposition

    提交头的content-disposition的第一部分的值。

    disposition_options

    提交头的content-disposition的第二部分的值,词典。

    参考:

    RFC1867,HTML表单提交文件,"Form-based File Upload in HTML"

    4.6.3其他函数

    parse_qs(qs[,keep_blank_values,strict_parsing])

    这个函数的功能等同于标准库cgi parse_qs,但是是用C语言写的,运行更快。

    转换一个query字符串(URL中附加的提交数据)作为字符串参数。数据以词典返回。词典的键名是query变量的变量名,值是对应变量的值的列表。

    可选参数keep_blank_values是一个标志变量指定URL编码中的空值是否作为空字符串处理。True指定空值转换为空白字符串。缺省值是False指定空值被忽略。

    注意:strict_parsing参数尚未实现。

    parse_qsl(qs[,keep_blank_values,strict_parsing])

    这个函数功能等同于标准库cgi parse_qsl,但是是用C语言写的,速度更快。

    转换一个query字符串,返回一个列表的数据,变量名和变量值对。

    可选参数keep_blank_values和strict_parsing同上。

    与上面函数的不同就是返回数据的格式。

    redirect(req,location[,permanent=0,text=None])

    这是一个可以方便的重定向浏览器到另外一个地址的函数。当permanent为True时,MOVED_PERMANENTLY状态被发送到客户端,或者是MOVED_TEMPORARILY。并发送一段简短的文本告知浏览器,文档已经被移走(当这个罕见的浏览器不支持重定向时);提示文本可以被text参数覆盖。

    如果这个函数在响应头已经被发送之后调用,会触发IOError异常。

    这个函数触发apache.SERVER_RETURN异常放弃之后的处理。如果不想这样,可以在redirect之外套一个try/except块来捕捉异常。

     


    4.7Cookie-HTTP状态管理

    Cookie模块提供了方便的(convenient)的方法来创建,分析,发送和接收HTTP Cookies,按照Netscape的定义。

    注意:尽管RFC工作组描述了如何使用Cookie,但是实际上还是只有Netscape原始浏览器支持。而且,很多流行的浏览器还是兼容IETF标准的,而且即便声称RFC兼容的。因此,这个模块支持当前范例,而不是完全RFC兼容的。

    在特殊情况下,Netscape与RFC的Cookie有很大的区别,比如路径和域名。Cookie模块忽略这种引入的属性,所以所以所有引入的cookie以Netscape风格的cookie告终,没有属性的定义。

    参考:

    客户端持久化状态-HTTP Cookies

    http://wp.netscape.com/newref/std/cookie_spec.html

    RFC 2109,"HTTP状态管理机制"

    RFC 2964,"使用HTTP状态管理"

    RFC 2965,"HTTP状态管理机制"

    HTTP Cookies:标准,秘密与政见

    http://arxiv.org/abs/cs.SE/0105018

    4.7.1类定义

    class Cookie(name,value[,attributes])

    这个类用于构造一个单一的cookie名为name,值为value。在Netscape和RFC2109中定义的属性将作为关键字参数。

    属性描述了cookie的属性,而他们的字符串将会成为cookie的一部分。Cookie类限定了属性名必须是有效值,如下是可用的属性名:name、 value、version、path、domain、secure、comment、expires、max_age 、commentURL、discard、port、__data__。

    __data__属性是一个通用的词典可用于存储任意值,如果需要。在使用Cookie的子集时很重要。

    expires属性。按照如下格式解释'Wdy, DD-Mon-YYYY HH:MM:S GMT' (按照每个Netscape cookie的定义),或者按照新纪元开始的秒数(自动转换为GMT时间字符串)。无效的expires值会抛出ValueError异常。

    当转换到字符串时,一个Cookie将会被转换到Cookie或Set-Cookie头。

    注意:不像Python标准库Cookie类,这个类指定单一cookie,等同于Python标准库中的Morsel。

    parse(string)

    这是一个类方法,用于从一个cookie字符串创建Cookie实例并传递到响应头的值。转换过程中,属性名将会转换为小写。

    因为这是个类方法,所以必须通过类来调用。

    这个方法返回Cookie实例的词典,不是单一的Cookie实例。

    如下是获取单一Cookie实例的示例:

    mycookies=Cookie.parse("spam=eggs; expires=Sat, \

    14-Jun-2003 02:42:36 GMT")

    spamcookie=mycookies["spam"]

    注意:因为这个方法使用词典,所以不可能返回同名cookies。如果需要多个值在同一个cookie中,考虑使用MarshalCookie。

    class SignedCookie(name,value,secret[,attributes])

    这是Cookie的子类。这个类按照name和value自动创建一个经过HMAC (md5)签名过的Cookie,secret必须是非空字符串。

    parse(string,secret)

    这个方法同Cookie.parse(),但是cookie要被验证。如果签名的验证失败,则返回Cookie类。

    注意:通常检查SignedCookie.parse()的返回类型。如果返回类型是Cookie(而不是SignedCookie),则签名验证失败:

    #假设spam是一个签名过的cookie

    if type(spam) is not Cookie.SignedCookie:

    #签名验证失败的处理

    class MarshalCookie(name,value,secret[,attributes])

    这是SignedCookie的子类。允许value是任何的集结(marshallable)对象。Python核心(core)类型如字符串,整数,列表等,都是集结类型对象。完整的列表查看marshal模块文档。

    转换过程中会检查签名,不正确的签名的cookie无法被集结(unmarshalled)。

    4.7.2函数

    add_cookie(req,cookie[,value,attributes])

    向响应头方便的设置一个cookie。req是mod_python请求对象。如果cookie是一个Cookie类或其子类的实例。则cookie被设置,否则cookie参数必须是一个字符串,用于构造Cookie类的实例。cookie用作名字,value作为值,有效的Cookie属性作为关键字参数。

    这个函数同时设置'Cache-Control: no-cache="set-cookie"'头来通知(inform)cookie值不需要缓存。

    如下是使用这个函数的一种方法:

    c=Cookie.Cookie('spam','eggs',expires=time.time()+300)

    Cookie.add_cookie(req,c)

    如下是另一个例子:

    Cookie.add_cookie(req,'spam','eggs',expires=time.time()+\

    300)

    get_cookies(req[,Class,data])

    从输入头获取(retrieving)cookie的方法。req是mod_python请求对象。Class是一个拥有parse()方法的用于转换成的cookie类,缺省是Cookie类。Data可以是任何关键字参数,将会被传递到parse()方法。对SignedCookie和MarshalCookie类等需要secret参数的parse()方法非常有用。

    4.7.3例子

    如下例子设置一个持续(expires)300秒的cookie:

    from mod_python import Cookie,apache

    import time

    def handler(req):

    cookie=Cookie.Cookie('eggs','spam')

    cookie.expires=time.time()+300

    Cookie.add_cookie(req,cookie)

    req.write('此响应包含cookie!\n')

    return apache.OK

    如下例子检查输入的集结cookie并显示到客户端。如果输入没有cookie则设置一个cookie。这个例子使用'secret007'作为HMAC签名。

    from mod_python import apache,Cookie

    def handler(req):

    cookies=Cookie.get_cookies(req,Cookie.MarshalCookie,\

    secret='secret007')

    if cookies.has_key('spam'):

    spamcookie=cookies['spam']

    req.write('Great, a spam cookie was found: %s\n'\

    % str(spamcookie))

    if type(spamcookie) is Cookie.MarshalCookie:

    req.write('Here is what it looks like decoded'\

    +':%s=%s\n'%(spamcookie.name,\

    spamcookie.value))

    else:

    req.write('WARNING: The cookie found is not a \

    MarshalCookie, it may have been tapered\

    with!')

    else:

    #MarshalCookie允许值为任何集结对象

    value={'egg_count':32, 'color':'white'}

    Cookie.add_cookie(req,Cookie.MarshalCookie('spam',\

    value,'secret007'))

    req.write('Spam cookie not found, but we just\

    set one!\n')

    return apache.OK

     

    上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页  

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.