2012-04-27 32 views
12

龍捲風* web框架中的HTTPRequest類有用maps GET and POST arguments to lists。我明白爲什麼 - 萬一給定的參數名稱被多次使用。但對於一些RequestHandlers來說,這是一個痛苦。例如,如果我想傳遞一個json對象並在服務器上原樣解析它。龍捲風將GET和POST參數映射到列表。我怎樣才能禁用這個「功能」?

什麼是禁用地圖到列表行爲的最直接的方法,以便我可以將未更改的json發送到龍捲風/旋風服務器?

*旋風,實際上,如果這裏存在實施差異。

回答

30

不是訪問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 }) 
+0

謝謝!如果我只想將整組參數作爲單個json對象返回,會怎麼樣?我可以通過迭代整個字典併爲每個鍵調用get_argument來重構它,但這似乎效率低下。 – Abe 2012-04-28 01:05:17

+3

json.dumps({k:self.get_argument(k)for k in self.request.arguments}) - 它並不是真的那麼低效。 – koblas 2012-04-28 13:39:27

3

我打算跟着「你倒黴了」。你可以重寫有問題的類(看起來不會很有趣),但除此之外,我沒有看到很多選項。


我只會用dict理解。

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

在Python 2.x中暫無數據 – 2014-06-05 21:22:09

+1

@ V3ss0n'ARGS = { '富' :('1' ,'2','3',}}; print {k:''。join(v)for k,v in args.iteritems()}'outputs'{'foo':'123'}'using 2.6+ 。 – cwallenpoole 2014-06-05 22:51:48

+0

@cwallenpoole是不是隻有2.7 +? https://docs.python.org/2.7/whatsnew/2.7.html#python-3-1-features – z0r 2014-08-04 04:35:35