2012-04-27 7 views
12

टर्ननाडो में HTTPRequest क्लास * वेब ढांचे में मददगार maps GET and POST arguments to lists। मैं समझता हूं क्यों - यदि किसी दिए गए तर्क का नाम कई बार उपयोग किया जाता है। लेकिन कुछ RequestHandlers के लिए, यह एक दर्द है। उदाहरण के लिए, यदि मैं एक जेसन ऑब्जेक्ट पास करना चाहता हूं और इसे सर्वर पर जैसा पार्स करना चाहता हूं।टॉरनाडो मानचित्र सूचियों के लिए प्राप्त करें और पोस्ट करें। मैं इस "फीचर" को कैसे अक्षम कर सकता हूं?

मानचित्र-से-सूची व्यवहार को अक्षम करने का सबसे सरल तरीका क्या है ताकि मैं एक बवंडर/चक्रवात सर्वर पर अनलर्टेड जेसन भेज सकूं?

* वास्तव में, यहां एक कार्यान्वयन अंतर होने पर चक्रवात, वास्तव में।

उत्तर

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

धन्यवाद! क्या होगा यदि मैं सिर्फ एक एकल जेसन ऑब्जेक्ट के रूप में तर्कों के पूरे सेट को वापस करना चाहता हूं? मैं पूरे शब्दकोश पर पुनरावृत्ति करके और प्रत्येक कुंजी के लिए get_argument को कॉल करके इसे पुनर्निर्माण कर सकता हूं, लेकिन यह अक्षम लगता है। – Abe

+3

json.dumps ({k: self.request.arguments में k के लिए self.get_argument (k)} - यह वास्तव में अक्षम नहीं है। – koblas

3

मैं "आप भाग्य से बाहर हैं" के साथ जाने जा रहा हूं। आप कक्षा में प्रश्न को फिर से लिख सकते हैं (ऐसा लगता है कि यह मजेदार नहीं होगा), लेकिन इसके अलावा मुझे कई विकल्प नहीं दिखते हैं।


मैं सिर्फ एक dict समझ का उपयोग करता हूं।

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

अजगर 2.x में उपलब्ध नहीं –

+1

@ V3ss0n 'आर्ग = { 'foo' :('1' , '2', '3',)}; प्रिंट {के: ''। के लिए शामिल हों (v) k, v में args.iteritems()} 'outputs' {'foo': '123'} '2.6+ । – cwallenpoole

+0

@cwallenpoole यह 2.7+ में नहीं है? https://docs.python.org/2.7/whatsnew/2.7.html#python-3-1- विशेषताएं – z0r

संबंधित मुद्दे

 संबंधित मुद्दे