form= cgi.FieldStorage()
print form
打印:FieldStorage(无,无,'年龄= 10& name = joe')
如何从该表单中获取数据?
我无法使用表单[FieldKey],因为没有字段键。
表单[' age']返回空白字符串
我使用的是Python 2.7
答案 0 :(得分:2)
其他答案已经解释了请求出现问题的原因以及如何修复它,但我认为更好地理解 FieldStorage
对象可能会有所帮助,以便您可以从错误的请求中恢复。
我基本上能够使用这个复制你的状态:
from cgi import FieldStorage
from StringIO import StringIO
f = FieldStorage(
fp=StringIO("age=10&name=joe"),
headers={"content-length": 15, "content-type": "plain/text"},
environ={"REQUEST_METHOD": "POST"}
)
print(f) # FieldStorage(None, None, 'age=10&name=joe')
这将按预期失败:
f["age"] # TypeError: not indexable
f.keys() # TypeError: not indexable
所以 FieldStorage
没有解析查询字符串,因为它不知道应该这样做,但是您可以让 FieldStorage
手动解析它:
f.fp.seek(0) # we reset fp because FieldStorage exhausted it
# if f.fp.seek(0) fails we can also do this:
# f.fp = f.file
f.read_urlencoded()
f["age"] # 10
f.keys() # ["age", "name"]
如果您需要从 FieldStorage
获取原始正文,您可以从 FieldStorage.file
属性获取它,file
属性会在 FieldStorage
解析它的内容时设置thinks 是一个普通的身体:
f.file.read() # "age=10&name=joe"
希望这能帮助其他在未来偶然发现这个问题的搜索者。
答案 1 :(得分:1)
这是不的答案。我不知道出了什么问题。但是,我在这台计算机上没有Python 2。我刚刚在repl.it上运行了一些代码。
这是发生的事情。
它的意思是。显然你的设置有一些特殊之处。如果我想到任何事情,我会回来。
答案 2 :(得分:1)
这是在FieldStorage解析“普通” POST数据时发生的,而不是例如形式。但是,如果HTTP请求的内容类型为Workday
,它将知道该怎么做。
这是具有单个发送按钮的HTML文件,单击它后,在将标头设置为Python CGI库喜欢的名称之后,名称和年龄数据将发送到proc.py脚本。
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
然后proc.py将这些值吐回来:
application/x-www-form-urlencoded