2014-07-22 7 views
6

Sto riscontrando alcuni problemi nell'elaborazione dei parametri inviati dai datables jQuery 1.10 quando l'elaborazione lato server è abilitata. Ho inizializzato DataTable nel lato javascript in questo modo:Come elaborare il parametro lato server inviato dai dati jquery usando Flask?

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

e ricevere la richiesta POST nel server basato su Flask utilizza questo:

@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') 

Al fine di filtrare i dati ho provato a guardare dentro richiesta .form ma il risultato è strano e non può essere trasformato facilmente in una matrice di oggetti. Ottengo somthing come questo:

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') 
] 
) 

Nella documentazione DataTables jquery dicono:

L'ordine [i] e colonne [i] i parametri che vengono inviati al server sono array di informazioni:

ordine [i] - è un array che definisce il numero di colonne su cui viene ordinato - ovvero se la lunghezza dell'array è 1, viene eseguito un ordinamento a colonna singola, altrimenti viene eseguito un ordinamento a più colonne.

colonne [i] - un array che definisce tutte le colonne nella tabella.

In entrambi i casi, i è un numero intero che cambia per indicare il valore dell'array. Nella maggior parte dei moderni ambienti di scripting lato server questi dati saranno automaticamente disponibili come array.

Tuttavia, Flask fornisce questi dati come un semplice dizionario, c'è un modo per trasformarlo facilmente in una serie di oggetti?

+1

Hai provato richiesta .get_json()? Maggiori informazioni qui: http://flask.pocoo.org/docs/api/#flask.Request.get_json – pgorsira

+1

All'inizio dà un risultato vuoto, ho quindi provato request.get_json (force = True) e poi ottengo '400 : Brutta richiesta'. Per il momento, ho collegato il codice javascript per inviare i dati come payload json. –

risposta

9

Get DataTable per inviare JSON

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

nel pallone, analizzare il JSON

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

Grazie. Per la cronaca, la parte "Invia dati come JSON nel corpo della richiesta" è fornita [qui] (http://datatables.net/manual/ajax) nei documenti. –

1

È possibile utilizzare questo piccolo pacchetto nifty che ho trovato https://github.com/bernii/querystring-parser

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

che repo dà un 404 ora – k107

+0

Il collegamento è ora corretto –

Problemi correlati