Tornadoアプリケーションは、http body要求を通じてPOSTデータを受け入れます
ハンドラーでリクエストを取得できます
def post(self):
data = self.request.body
私が取得しているデータは、str(dictionary)のfrom
Python辞書の形式でこのデータを受け取る方法はありますか?
サーバー側でeval
を使用して、この文字列をPython辞書に変換したくない。
Eloimの答えに代わるものとして、Tornadoは tornado.escape を「HTML、JSON、URLなどのエスケープ/アンエスケープ」に提供します。それを使用すると、まさにあなたが望むものを与えるはずです:
data = tornado.escape.json_decode(self.request.body)
JSON文字列を受信しています。 JSONモジュールでデコードする
import json
def post(self):
data = json.loads(self.request.body)
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))
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)
どう?
bind_args = dict((k,v[-1] ) for k, v in self.request.arguments.items())