Dan*_*son 3 python apache cgi mod-python
这个问题可能很简单.
我试图给python一个旋转.我认为开始这样做的一个好方法是创建一个简单的cgi脚本来处理一些表单数据并做一些魔术.我的python脚本由apache使用mod_python正确执行,并将打印出我想要打印的任何内容.
我唯一的问题是cgi.FieldStorage()总是空的.我尝试过使用POST和GET.每次试用我都填写两个表格字段.
<form action="pythonScript.py" method="POST" name="ARGH">
<input name="TaskName" type="text" />
<input name="TaskNumber" type="text" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
如果我将表单更改为指向perl脚本,则会正确报告表单数据.python页面总是给我相同的结果:键数:0
#!/usr/bin/python
import cgi
def index(req):
pageContent = """<html><head><title>A page from"""
pageContent += """Python</title></head><body>"""
form = cgi.FieldStorage()
keys = form.keys()
keys.sort()
pageContent += "<br />number of keys: "+str(len(keys))
for key in keys:
pageContent += fieldStorage[ key ].value
pageContent += """</body></html>"""
return pageContent
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.5.2和Apache/2.2.3.这是我的apache conf文件(我的脚本在/ var/www/python中):
<Directory /var/www/python/>
Options FollowSymLinks +ExecCGI
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
</Directory>
Run Code Online (Sandbox Code Playgroud)
你的问题是你混合了两种不同的方法:CGI和mod_python.您将脚本声明为mod_python发布者,这就是index调用其方法的原因- 这也使其成为模块,而不是脚本.
如果您使用CGI,你会从你的Apache配置中删除mod_python的指令,只是离开ExecCGI,并且或者重命名脚本有.cgi扩展或设置处理程序的.py扩展名是CGI,以及.然后您的脚本将作为脚本执行,这意味着index您在脚本中定义的函数将不会被执行,除非您从脚本的顶层调用它.
我记得 - 但是我用mod_python打了很长时间 - 如果你想使用mod_python,你应该使用mod_python.util.FieldStorage而不是cgi.FieldStorage访问POST数据.
说了这么多,一多为裸机网页内容更好的选择是WSGI,例如,通过mod_wsgi的.而且通常比裸机网页内容更好的选择是使用Web框架,像Django的,TurboGears中,主塔,或上列出的许多人之一,例如,在Web框架页面wiki.python.org
| 归档时间: |
|
| 查看次数: |
5549 次 |
| 最近记录: |