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處理),可以直接訪問文件名測試。