web-dev-qa-db-ja.com

竜巻request.body

Tornadoアプリケーションは、http body要求を通じてPOSTデータを受け入れます

ハンドラーでリクエストを取得できます

def post(self):
    data = self.request.body

私が取得しているデータは、str(dictionary)のfrom

Python辞書の形式でこのデータを受け取る方法はありますか?

サーバー側でevalを使用して、この文字列をPython辞書に変換したくない。

26
Joel James

Eloimの答えに代わるものとして、Tornadoは tornado.escape を「HTML、JSON、URLなどのエスケープ/アンエスケープ」に提供します。それを使用すると、まさにあなたが望むものを与えるはずです:

data = tornado.escape.json_decode(self.request.body)
39
Farray

JSON文字列を受信して​​います。 JSONモジュールでデコードする

import json

def post(self):
    data = json.loads(self.request.body)

詳細情報: http://docs.python.org/2/library/json.html

20
Eloims

Tornadoでリクエストを解析しているときに、同様の問題が発生したと思います。 urllib.unquote_plusモジュールを使用してみてください。

import urllib
try:
    import simplejson as json
except ImportError:
    import json


data = json.loads(urllib.unquote_plus(self.request.body))

私のコードは両方の異なるリクエスト形式に対応する必要があったため、次のようなことをしました。

try:
    json.loads(self.request.body)
except:
    json.loads(urllib.unquote_plus(self.request.body))
1
Mitch

WebApp2を使用している場合、独自のjson extrasを使用します。 (デコード) http://webapp2.readthedocs.io/en/latest/_modules/webapp2_extras/json.html

    data = json.decode(self.request.body)
    v = data.get(key)   
    self.response.write(v)

たとえば、私の投稿キーは「postvalue」です

    data = json.decode(self.request.body)
    v = data.get('postvalue')   
    self.response.write(v)
0
ADL

どう?

bind_args = dict((k,v[-1] ) for k, v in self.request.arguments.items())
0
suger