gpt4 book ai didi

python - cgi.FieldStorage 始终为空 - 从不返回 POSTed 表单数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:22 26 4
gpt4 key购买 nike

这个问题可能简单得令人尴尬。

我想尝试一下 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>

如果我更改表单以指向 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

我使用的是 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>

最佳答案

您的问题是您混合使用了两种不同的方法: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 东西更好的选择是使用 web 框架,比如 Django , TurboGears , Pylons ,或许多其他列表中的一个,例如 web frameworks page on wiki.python.org

关于python - cgi.FieldStorage 始终为空 - 从不返回 POSTed 表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com