web-dev-qa-db-ja.com

tornadoはGETとPOST引数をリストにマップします。この「機能」を無効にするにはどうすればよいですか?

Tornado * WebフレームワークのHTTPRequestクラスは便利です GETとPOST引数をリストにマップします 。理由はわかります-特定の引数名が複数回使用された場合。しかし、一部のRequestHandlerにとって、これは面倒です。たとえば、jsonオブジェクトを渡して、サーバー上でそのまま解析したい場合です。

変更されていないjsonをトルネード/サイクロンサーバーに送信できるように、リストへのマップの動作を無効にする最も簡単な方法は何ですか?

*サイクロン、実際には、ここで実装の違いがある場合に備えて。

15
Abe

self.request.argumentsに直接アクセスする代わりに、アクセサ関数を使用する必要があります。

self.get_argument("ID", default=None, strip=False)

これにより、単一のアイテムが返されます。

引数をJSONオブジェクトに変換したい場合は、非常に簡単に行うことができます。

json.dumps({ k: self.get_argument(k) for k in self.request.arguments })
37
koblas

私は「あなたは運が悪い」と行くつもりです。問題のクラスを書き直すことはできますが(それは面白くないようです)、それ以外は多くのオプションがありません。


私は口述の理解を使用します。

{k:''.join(v) for k,v in req.arguments.iteritems()}
3
cwallenpoole