私の(ダム)問題に対する解決策を見つけ、それを以下に挙げました。なぜenviron ['QUERY_STRING']は長さゼロの文字列を返しますか?
私はUbuntu 11.04でPython 2.7.1+を使用しています。クライアント/サーバーは同じコンピュータ上にあります。
ウィングデバッガから、私はサーバーコードが呼び出されていることを知っており、コードを一度に1行ずつ歩くことができます。この例では、私は22バイトが転送されたことを知っています。 Firebugので
、私はネットポストタブの下で、このデータを見た:
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"]
ウィングデバッガでは、クライアントからサーバーにデータが渡されていることを確認しました。
>>> 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)
あなたは 'environ'ディクテーション全体を印刷しようとしましたか? –
詳細については、編集した質問を参照してください。 – Jarek