mod_python
第19章 mod_python
1. 测试
test.py
修改配置文件,添加如下内容
<Directory /var/www/foundations/>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler test
PythonDebug On
</Directory>
这个配置方法和书上的不太一样,在测试的时候url也是localhost/foundation/test.py。在使用浏览器浏览的时候,test.py的handler函数会自动地被调用。
2. 分派请求
dispatcher.py根据req.uri来确定要调用的模块。为了测试,首先需要再次修改配置文件:
AddHandler mod_python .py
PythonHandler dispather
PythonDebug On
由于配置和书上不同,除了url要以.py为结尾之外,还要将dispatcher.py中gethandlername的正则"/([a-zA-Z0-9_-]+)/.prog($|/|/?)"修改为"/([a-zA-Z0-9_-]+)/.py($|/|/?)"。完成修改之后访问localhost/foundation/test.py,测试正常。不过当访问不存在的module的时候,程序中传递给404的字符串并不会显示出来,看来只是给日志用的。
3. 处理输入
pathinfo.py、get.py和post.py都是处理输入的例子,只不过分别采用不同的方法:pathinfo.py分析url;get.py使用get方法;post.py构造表单,采用post方法提交。在get和post的例子中都用到了mod_python. util. FieldStorage,例如:
form = util.FieldStorage(req)
之后就可以使用form.getfirst('month')来访问get和post提交的数据了。
4. 转义
escape.py介绍了提交数据和现实数据时的转义。关键的两句是:
urllib.quote_plus(form.getfirst('data')),
cgi.escape(form.getfirst('data'))))
其中quote_plus进行的实际是HTML实体的转移,用于展示内容的时候使用。而escape则是进行的是URL的转移,例如空格等等不能直接出现在网址中的符号。
以上例子在不修改Apache配置文件的情况下(采用dispacther处理),可以直接访问文件名测试。