Python cgi.FieldStorage() 在表单提交时为空
我在Apache 2的虚拟主机配置中有以下指令:
<Directory /var/www/foo_test>
Options MultiViews +ExecCGI
AddHandler cgi-script .py
AllowOverride All
</Directory>
我有一个简单的HTML表单:
<html>
<body>
<form action="foo.py" method="post" id="foo_form">
<input type="text" id="foo" />
<input type="submit" />
</form>
</body>
</html>
这是一个叫做foo.py
的可执行脚本,当表单提交时会被调用:
#!/usr/bin/env python
import cgi
arguments = cgi.FieldStorage()
print "Content-Type: text/html\n"
print repr(arguments)
当我提交表单时,我收到以下响应:
FieldStorage(None, None, [])
在FieldStorage
这个对象中,没有包含表单foo_form
中指定字段的值。
如果我把Python脚本换成Perl脚本,并使用它的CGI
模块,同时调整Apache的指令来处理Perl的CGI,我就能顺利读取表单中的字段。这让我觉得我的Apache设置是没问题的。
但是,我在创建cgi.FieldStorage()
对象时,或者在Apache的设置上,有没有什么我遗漏的地方,导致表单提交失败呢?
2 个回答
0
这让我大吃一惊,但我遇到了这样的情况。
显然,你不能从 cgi.FieldStorage
中获取信息超过一次?
在浏览器的任何 console
标签中运行:
$.post('/api/save.cgi', {'hello': 'world'}, (response) => {
console.log("DONE");
});
后端的 Python 代码
#!/usr/bin/env python3
import cgi
fcgi = cgi.FieldStorage()
sys.stderr.write("try 1 %s \n" % fcgi)
fcgi = cgi.FieldStorage()
sys.stderr.write("try 2: %s \n" % fcgi)
查看错误日志:
try 1: FieldStorage(None, None, [MiniFieldStorage('hello', 'world')])
try 2: FieldStorage(None, None, [])
2
如果你想让输入框里的数据在表单提交时被发送出去,你需要给这个输入框加一个 name
属性。