2014-07-22 11 views
6

मुझे सर्वर साइड प्रोसेसिंग सक्षम होने पर jquery डेटाटेबल्स 1.10 द्वारा भेजे गए पैरामीटर को प्रोसेस करने में कुछ समस्याएं हैं। मैं इस तरह जावास्क्रिप्ट पक्ष में datatable प्रारंभ:फ्लास्क का उपयोग कर jquery डेटाटेबल्स से भेजे गए सर्वर साइड पैरामीटर को कैसे संसाधित करें?

var table = $('#mytable').DataTable({ 
       "processing": true, 
       "serverSide": true, 
       "ajax": { 
        'url': url, 
        'type': 'POST' 
       }, 
       "columns": data 
      }); 

और का उपयोग कर बोतल आधारित सर्वर में पोस्ट अनुरोध प्राप्त इस:

@app.route('/data/<data_key>', methods=['POST']) 
def get_data(data_key): 
    print request.form 

    # do some processing here in order to filter data 
    # ... 

    return Response(json.dumps(data), status=200, mimetype='application/json') 

आदेश डेटा को फ़िल्टर करने में मैं अनुरोध अंदर देखने के लिए करने की कोशिश की .form लेकिन परिणाम अजीब है और आसानी से वस्तुओं की एक सरणी में परिवर्तित नहीं किया जा सकता है। मैं इस तरह somthing मिलती है:

ImmutableMultiDict(
[ 
('columns[0][data]', u'ReportDate'), 
('draw', u'1'), 
('columns[1][name]', u''), 
('columns[1][data]', u'FundName'), 
('columns[0][orderable]', u'true'), 
('columns[1][searchable]', u'true'), 
('columns[1][orderable]', u'true'), 
('order[0][column]', u'0'), 
('columns[0][name]', u''), 
('order[0][dir]', u'asc'), 
('search[value]', u''), 
('columns[1][search][regex]', u'false'), 
('columns[0][search][value]', u''), 
('search[regex]', u'false'), 
('columns[1][search][value]', u''), 
('columns[0][search][regex]', u'false'), 
('start', u'0'), 
('length', u'10'), 
('columns[0][searchable]', u'true') 
] 
) 

jQuery datatables प्रलेखन में वे कहते हैं:

क्रम [i] और स्तंभों [i] पैरामीटर है कि सर्वर के लिए भेजा जाता जानकारी के एरे हैं:

ऑर्डर [i] - एक सरणी परिभाषित करती है कि कितने कॉलम ऑर्डर किए जा रहे हैं - यानी यदि सरणी लंबाई 1 है, तो एक कॉलम सॉर्ट किया जा रहा है, अन्यथा बहु-कॉलम सॉर्ट किया जा रहा है।

कॉलम [i] - तालिका में सभी कॉलम को परिभाषित करने वाला एक सरणी।

दोनों मामलों में, मैं एक पूर्णांक है जो सरणी मान को इंगित करने के लिए बदल जाएगा। अधिकांश आधुनिक सर्वर-साइड स्क्रिप्टिंग वातावरण में यह डेटा स्वचालित रूप से आपके लिए सरणी के रूप में उपलब्ध होगा।

हालांकि, फ्लास्क इस डेटा को एक साधारण शब्दकोश के रूप में प्रदान करता है, क्या इसे आसानी से वस्तुओं की एक सरणी में बदलने का कोई तरीका है?

+1

उपयोग कर सकते हैं, पार्स आप अनुरोध करने की कोशिश की है .get_json()? यहां अधिक जानकारी: http://flask.pocoo.org/docs/api/#flask.Request.get_json – pgorsira

+1

सबसे पहले यह एक खाली परिणाम देता है, फिर मैंने request.get_json (बल = सही) की कोशिश की और फिर मुझे '400 मिल गया : खराब अनुरोध'। इस पल के लिए, मैंने जावास्क्रिप्ट कोड को जेसन पेलोड के रूप में डेटा भेजने के लिए लगाया। –

उत्तर

9

json

ajax: { 
    url: "/api/data_table", 
    type: "POST", 
    data: function (args) { 
     return { "args": JSON.stringify(args) }; 
    } 
}, 

भेजने के लिए कुप्पी में DataTable जाओ json

args = json.loads(request.values.get("args")) 
columns = args.get("columns") 
+0

धन्यवाद। रिकॉर्ड के लिए, दस्तावेज़ अनुरोध में जेएसओएन के रूप में डेटा जमा करें [भाग] [http://datatables.net/manual/ajax) दस्तावेज़ों में प्रदान किया जाता है। –

1

आप इस छोटे से गंधा पैकेज है कि मैंने पाया https://github.com/bernii/querystring-parser

from querystring_parser import parser 
args = parser.parse(request.query_string) 
print args['columns'] 
+0

कि रेपो 404 अब – k107

+0

देता है लिंक अब तय किया गया है –

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