我找到了解决我(哑)问题的方法并将其列在下面。
我在Ubuntu 11.04上使用Python 2.7.1+。客户端/服务器位于同一台计算机上。
从Wing调试器,我知道正在调用服务器代码,我可以一次遍历代码。在这个例子中,我知道传输了22个字节。
在Firebug中,我在Net Post选项卡下看到了这些数据:
Parameter application/x-www-form-urlencoded
fname first
lname last
Source
Content-Type: application/x-www-form-urlencoded
Content-Length: 22 fname=first&lname=last
这是我正在使用的客户端代码:
<html>
<form action="addGraphNotes.wsgi" method="post">
First name: <input type="text" name="fname" /><br />
Last name: <input type="text" name="lname" /><br />
<input type="submit" value="Submit" />
</form>
</html>
这是服务器代码:
import urlparse
def application(environ, start_response):
output = []
# the environment variable CONTENT_LENGTH may be empty or missing
try:
# NOTE: THIS WORKS. I get a value > 0 and the size appears correct (22 bytes in this case)
request_body_size = int(environ.get('CONTENT_LENGTH', 0))
except (ValueError):
request_body_size = 0
try:
# environ['QUERY_STRING'] returns ""
**values = urlparse.parse_qs( environ['QUERY_STRING'] )**
except:
output = ["parse error"]
在Wing调试器中,我已经验证了数据正从客户端传递到服务器:
>>> environ['wsgi.input'].read()
'fname=first&lname=last'
找到了我的问题。我在错误的代码中进行了复制和粘贴。这是我用于表格的代码,但是当我开始使用AJAX并停止使用表格时停止添加它。现在,一切正常。
# When the method is POST the query string will be sent
# in the HTTP request body which is passed by the WSGI server
# in the file like wsgi.input environment variable.
request_body = environ['wsgi.input'].read(request_body_size)
values = parse_qs(request_body)
答案 0 :(得分:3)
您正在进行POST
查询,因此QUERY_STRING
确实将为空,因为它代表GET
请求的查询字符串(它也可以出现在其他请求类型中)但它与手头的问题无关)。您应该通过使用POST
流来解析wsgi.input
数据。