mod_python中文文档
mod_python是apache组织的一个项目,通过它,可以开发psp或cgi,mod_python功能强大,速度快,是非常优秀的web开发工具。
mod_python中文文档
第一章 简介
1.1 性能
1.2 适应性
1.3 历史
第二章 安装
2.1 前提条件
2.2 编译
2.2.1 运行 ./configure
2.2.2 开始 make
2.3 安装
2.3.1 运行 make install
2.3.2 配置 Apache
2.4 测试
2.5 故障排除
第三章 指南
3.1 快速开始,学习发布处理器(Publisher Handler)
3.2 快速学习,看一下apache怎样处理请求
3.3 那么mod_python到底做了些什么呢?
3.4 现在学习一些更复杂的—认证
第四章 Python API
4.1 多解释器
4.2 请求处理器
4.5 apache—–访问apache的内部
4.5.1方法
4.5.2 table对象(mp_table)
4.5.3 request对象
4.8 Session—会话管理
第五章 Apache配置文件指示
5.1 请求指示
5.1.1 Python*Handler指示的语法
5.1.2 PythonPostReadRequestHandler
5.3 连接处理器
5.3.1 PythonConnectionHandler
5.4 其他指示
5.4.9 PythonOptimize
5.4.10 PythonOption
第六章 标准处理器
6.1 发布处理器
6.1.1 介绍
6.1.2 发布处理器的规则
6.1.3 表单数据
6.2 PSP处理器
A. Changes from Previous Major Version (2.x)
Mod_python Tip
mod_python 3.1.3 版本不能正确upload file 的解决办法
mod_python中文文档
— oatil, eddyxu [2004-08-09 23:22:00]
mod_python是apache组织的一个项目,通过它,可以开发psp或cgi,mod_python功能强大,速度快,是非常优秀的web开发工具。
第一章 简介
1.1 性能
mod_python的一个最主要优点就是在性能上超越传统CGI。下面是一个非常粗略的测试。该测试是在一台运行Red Hat Linux 7.3的奔腾1.2G的机器上完成的。Ab 用来对4种脚本进行测试,所有的都是从标准cgi模块输入(因为这是一个典型Python cgi脚本开始的方式), 然后输出一个简单的单词”Hello!”。这个结果是基于10000次并发为1的请求。
Standard CGI: 23 requests/s
Mod_python cgihandler: 385 requests/s
Mod_python publisher: 476 requests/s
Mod_python handler: 1203 requests/s
1.2 适应性
Apache分阶段的处理请求(比方说:读取请求,解析header, 检查存取路径,等等)。这些阶段能被称为”处理器”(handler)的函数实现。传统上, “处理器”是由C语言编写,并编译成Apache的模块。Mod_python提供了一个通过Python写的Apache处理器的来扩展Apache功能的方法。关于Apache请求处理过程的详尽描述,请参阅 Apache API Notes, 也可以参阅 Mod_python – Integrating Python with Apache。
为了轻松地从CGI移植,一个标准的mod_python处理器提供了模拟的CGI环境,允许用户在不对代码做任何修改的情况下,使遗留的脚本运行在mod_python下(大多数情况)。
See Also:
http://dev.apache.org/
Apache Developer Resources
http://www.modpython.org/python10/
Mod_Python – Integrating Python with Apache, presented at Python 10
1.3 历史
Mod_python起源于一个被称为Httpdapy(1997)的项目。很长时间以来, Httpdapy并没有被称作mod_python,因为Httpdapy不是专门用于Apache的。 Httpdapy被设计成跨平台的,实际上最初是为Netscape server写的(那个时候被称为Nsapy)(1997)
这个Httpdapy的README文件的摘要,很好的阐述了在HTTP server中嵌入Python所带来的挑战和解决方案。
第二章 安装
注意:得到关于安装和其他问题帮助的最好地方是mod_python的邮件列表。请花几分钟,发送一封主题为”subscribe” 的e-mail至mod_python-request@modpython.org, 加入mod_python的邮件列表。
2.1 前提条件
Python 2.2.1或以后版本。Python的早期版本将不能工作。
我的安装采用的是Python2.5版本;
Apache 2.0.40或以后版本(对于Apache 1.3.x版本,请使用mod_python 2.7.x版本)
我的安装最终确定的Apache版本为2.2.4,注意新版本不指定能够与mod_python兼容,会报些乱七八糟的错误,比如在make的时候就无法通过;
为了编译mod_python,你将需要Apache和Python的包含文件(include files),也包括安装在你系统上的Python 的库。如果你是从源码安装的python和Apahce,那么你已经有了所需要的一切。但是,如果你是使用预打包(prepackaged)的软件(比如,Red Hat Linux RPM, Debian, 或者从sunsite得到的Solaris packages,等等),那么很可能你的系统里只有二进制文件而没有源文件。通常,编译mod_python所需要的Apache和Python得包含文件和库文件是分离的”开发”包的一部分。如果你不确定你是否有所有需要的文件,或者从源码编译和安装Python和Apache,或者参考你系统中关于如何得到开发包的文档。
2.2 编译
有两种方法将模块编译并连接到Apache — 静态的,或者作为DSO(Dynamic Shared Object).
DSO是mod_python现在更流行的并且被推荐的方法。模块被编译为一个共享库,在运行时有服务器动态装入。
DSO的好处是模块安装时不需要重新编译Apache,并且需要时再使用。关于Apahce DSO机制更详尽的描述, http://httpd.apache.org/docs-2.0/dso.html.
现在mod_python只支持DSO。
静态连接是一种较老的方法。随着动态连接在大多数的平台上的实现,它被越来越少的用到。它主要的缺点是需要重新编译Apache,在很多情况下这可不是一个好的选择。
2.2.1 运行 ./configure
./configure脚本将分析你的环境,并且创建为你系统特别定制的Makefiles。除了所有标准autoconf所做的以外,./configure还要作如下的工作:
检查一个被成为apxs的程序是否可用。这个程序是标准Apache分发包的一部分,并且也是编译DSO所必需的。如果在你的PATH目录或者/usr/local/apache/bin目录下无法找到apxs,那么DSO的编译将无法进行.
你可以通过–with-apxs选项,手动指出apxs所在目录,比如:
$ ./configure –with-apxs=/usr/local/apache/bin/apxs
./configure –prefix=/usr/local/mod_python –with-apxs=/usr/local/apache2/bin/apxs –with-python=/usr/local/Python/bin/python2.5
之前在config时候出现错误,因为没有指定python2.5文件位置,只给了bin目录位置,报错信息为:is a directory configure: error: This version of mod_python only works with Python major version 2 指定python2.5绝对路径后,才通过config。
推荐你指定该选项。
检查你的Python的版本,并试图通过参看编译到你的Python二进制文件中的不同参数,判断libpython的位置。通常,它会用到在你的PATH目录中所找到的python程序。如果在这些目录中所找到的Python二进制文件不合适,或者不是mod_python所期望的,你可以通过–with-python选项,指定一个供选择的位置,例如:
$ ./configure –with-python=/usr/local/bin/python2.2
2.2.2 开始 make
开始编译,只要简单的输入命令
$ make
出错:serverobject.c:387: warning: initialization from incompatible pointer type
/usr/local/apache2/build/libtool –silent –mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/mod_python-3.3.1/src/include -I/usr/local/apache2/include -I/usr/local/Python/include/python2.5 -c -o connobject.lo connobject.c && touch connobject.slo
connobject.c: In function ‘_conn_read’:
connobject.c:142: error: request for member ‘next’ in something not a structure or union
apxs:Error: Command failed with rc=65536
.
make[1]: *** [mod_python.so] Error 1
make[1]: Leaving directory `/usr/local/mod_python-3.3.1/src’
make: *** [do_dso] Error 2
查找原因:apache版本问题,估计2.2.10还没有可用mod_python(我的是2.2.11). 换成2.2.4就可以了( http://www.javaeye.com/problems/8068 )
2.3 安装
2.3.1 运行 make install
这部分安装需要以根用户(root)身份进行。
$ su
# make install
这会简单的将库文件拷贝到你的Apache libexec目录下,其他所有的模块均在这里。
最后它将安装Python的库文件到site-packages目录并且编译它们。
注意: 如果你希望选择性的仅仅安装Python库文件或者仅安装DSO(这可能不总是需要超级用户权限),你可以用如下的make目标:install_py_lib and install_dso
2.3.2 配置 Apache
如果你将mod_python编译成DSO,那么你需要通过在Apache的配置文件(通常称为httpd.conf 或者 apache.conf)里面加入如下一行,来载入模块:
修改httpd.conf文件,添加:
LoadModule python_module /usr/local/apache2/modules/mod_python.so
#Mod_python.so路径/usr/local/apache2/modules
mod_python.so的实际路径可能会变化,但是make install在近结束时会报告mod_python.so的位置和LoadModule目录的形式。
2.4 测试
使你网站上的某些目录可见,比如,htdocs/test
在主配置文件或者.htaccess中加入下面几句话。如果你准备使用.htaccess,你就不需要
修改httpd.conf文件,如下:
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
之后在/usr/local/apache2/htdocs/test目录下,建立mptest.py文件,如下:
1 from mod_python import apache(将前面的数字去掉,且注意一定要tab键,这是python的语法;可以不用复制这个格式的,请查看后面格式中的书写)
2
3 def handler(req):
4 req.write(“Hello World!”)
5 return apache.OK
排错过程:
之后访问http://localhost/test/mptest.py 浏览器报错:
ImportError: No module named mptest
将httpd.conf修改为:
######################################
AddHandler mod_python .py
PythonPath “[‘/usr/local/apache2/htdocs/test’] + sys.path” #可以注释掉这行;
PythonHandler mptest
PythonDebug On
##############################################
或
#####################
#
# AllowOverride FileInfo
# SetHandler python-program
# AddHandler mod_python .py
# PythonPath “[‘/usr/local/apache2/htdocs/test’] + sys.path”
# PythonHandler mptest
# PythonAutoReload On
# PythonDebug On
#
############################################
后,访问时,仍然报错,但报错信息如下:
IndentationError: expected an indented block
最后发现时mptest.py文件输入错误,是语法错误,正确的应该是:
from mod_python import apache
def handler(req):
req.write(“Hello World!”) #注意之前应该有个”tab”键
return apache.OK #注意之前应该有个”tab”键
之后再访问,就没有错误了,其实不需要将
## PythonPath “[‘/usr/local/apache2/htdocs/test’] + sys.path”
加到httpd.conf文件中也是可以正常访问的;
至此,mod_python的安装与测试完成;
将你的浏览器指向mptest.py所在的URL; 你将会看到”Hello World!”. 如果你没有看到这些,请参阅下一节”故障排除”.
如果一切顺利,请前进到第三章《指南》。
2.5 故障排除
你可以尝试从如下方面确定问题所在
如果有错误输出,仔细研究之
检查服务器的日志文件,它可能含有有用的线索
尝试从命令行方式单进程的执行Apache
· ./httpd -X
这防止它在后台运行,并可以提供一些有用的信息。
在mod_python的邮件列表上咨询。确保包含如下特定的信息。
Mod_python版本
你的操作系统的类型,名称,版本
你的Python的版本,以及任何不寻常的编译选项
你的Apache的版本
Apache配置文件(.htaccess)相关的部分
Python代码中相关的部分
第三章 指南
现在通过前一章的学习,我们已经学会并安装好mod_python,现在可以通过快速阅读本章进入程序开发阶段。我强烈推荐你在阅读完本章以后接着阅读(至少是前面的部分)第4章python API的内容。
3.1 快速开始,学习发布处理器(Publisher Handler)
这一节为我们提供了一个快速的关于发布处理器的概况,从而使我们可以不用关注太多的细节就可以写出程序。在这本指南的最后一节,会有一个更详细全面的关于mod_python处理器如何工作的讲解。
发布处理器是mod_python的众多标准处理器中的一个,为了使你的发布处理器能够正常工作,需要在你的配置文件(通常是httpd.conf)中加入下面几句话:
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
(注意:D:/apache/Apache2/cgi-bin/oa是我的机器上的路径)
接下来的这个例子展示了一个简单的返回表单,这个表单询问用户的名称,电子邮箱,地址和意见,然后发送一封电子邮件给网络管理员,信的内容就是用户填写的意见。这个简单的程序包括两个文件:form.html—用来收集数据,form.py—表单的action指令发送的目标。
下面是form.html的代码:
请填写下面的回馈表单:
注意
没有评论