WSGIを使用してPOSTデータにアクセスする方法がわかりません。 wsgi.orgウェブサイトで例を試しましたが、うまくいきませんでした。現在Python 3.0を使用しています。 WSGIフレームワークは私が探しているものではないため、お勧めしません。
それをfieldstorageオブジェクトに取り込む方法を理解したいと思います。
POSTデータをFieldStorageオブジェクトに取得しようとしていると仮定します。
# env is the environment handed to you by the WSGI server.
# I am removing the query string from the env before passing it to the
# FieldStorage so we only have POST data in there.
post_env = env.copy()
post_env['QUERY_STRING'] = ''
post = cgi.FieldStorage(
fp=env['wsgi.input'],
environ=post_env,
keep_blank_values=True
)
body= '' # b'' for consistency on Python 3.0
try:
length= int(environ.get('CONTENT_LENGTH', '0'))
except ValueError:
length= 0
if length!=0:
body= environ['wsgi.input'].read(length)
WSGIはまだ完全に指定されていないことに注意してくださいPython 3.0、および人気のあるWSGIインフラストラクチャの多くは変換されていません(または2to3dになっていますが、適切にテストされていません)(wsgiref.simple_serverでも)実行されません。)今日、3.0でWSGIを実行するのはおおよその時間です。
これは私のために働きました(Python 3.0):
import urllib.parse
post_input = urllib.parse.parse_qs(environ['wsgi.input'].readline().decode(),True)
さらに短い
l = int(env.get('CONTENT_LENGTH')) if env.get('CONTENT_LENGTH') else 0
body = env['wsgi.input'].read(l) if l > 0 else ''
このコードは本番環境で機能します。
例として、いくつかのフレームワークがそれをどのように行うかを見てみることをお勧めします。 (1つをお勧めするのではなく、例として使用します。)
これが Werkzeug のコードです。
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/wrappers.py#L15
呼び出す
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/utils.py#L142
ここで要約するのは少し複雑なので、説明しません。