当前最常使用Python的地方之一就是Apache的mod_python模块。事实上,mod_python是在Apache Web服务器中嵌入了具有全部功能的Python解释器。这个模块通常被用来强劲而高效地产生动态网页,当然它还有一些其他的用途。
编写mod_python程序在很多方面和编写CGI程序类似,所以熟悉CGI(详见第18章)会对您学习mod_python有很大的帮助。mod_python和CGI之间也有不同的地方,在本章中,我们也将介绍这些不同。
19.1 理解为什么需要mod_python
我们已经在第18章中讨论过,CGI脚本是最常用的一种产生动态网页的方法。每当有页面请求的时候,对应的CGI脚本就被调用。它读取请求,产生应答,并最终终止。这是仿效HTTP的操作,后者的核心是一次为一个单一的请求服务。下一次又有请求的时候,CGI脚本会被重新调用,这样的设计就使CGI脚本具有语言和服务器中立的特性;而且事实上,所有流行的Web服务器和程序语言都支持CGI。
然而,这种兼容性是有代价的:那就是性能。启动一个CGI脚本很慢,操作系统需要为它建立新进程。Python解释器需要初始化和载入脚本。对于连接数据库的CGI脚本来说,性能就更差了,因为每次显示一个页面的时候,它们都必须建立一个新的数据库session。正是因为这个原因,CGI脚本不适合那些流量大的站点。
mod_python就是一个解决这个问题的方法。它实际上在Apache Web服务器中嵌入了一个完整的Python解释器。CGI脚本只在服务器进程初始化的时候载入一次。数据库连接也可以在Web服务器初始化的时候建立,并保持连接直到Web服务器关闭。每当要产生一个页面的时候,一个特殊的函数就被调用,所有关于请求的数据都被传入该函数。这个函数有权访问Web服务器初始化时建立的环境变量。例如,它可以重复使用已经存在的数据库连接。
尽管这种方法必须使用Apache服务器,但是它的优点要比缺点多得多,尤其是当您从头开始设计一个完整的Web应用的时候。Python可以作为那些专门开发Web应用语言的替代者,例如PHP。
事实上,mod_python除了用在提供页面之外还可以做其他的事情。它还可以在多个方面和Apache系统结合。例如:Apache提供了多种认证的处理方法,这些方法可以使您根据一个包含用户名和密码的文本文件或LDAP数据库来认证用户。您可以使用mod_python来编写您自己的认证处理程序(或许它通过一个远程XML-RPC服务器来验证),并随时在Apache中使用这个程序——即使是那些不是由Python代码产生的页面。







