2014-07-22 9 views
6

Mam pewne problemy z przetwarzaniem parametrów wysyłanych przez jquery datatables 1.10, gdy włączone jest przetwarzanie po stronie serwera. I zainicjowany DataTable w javascript strony jak ta:Jak przetwarzać parametry po stronie serwera wysyłane z jquery datatables za pomocą Flask?

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

i odbierać żądania POST serwer opartej kolby za pomocą tego:

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

W celu filtrowania danych Próbowałem zajrzeć życzenie .form, ale wynik jest dziwny i nie można go łatwo przekształcić w tablicę obiektów. I dostać somthing tak:

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

W dokumentacji DataTables jquery mówią:

Kolejność [i] i kolumny [I] Parametry, które są wysyłane do serwera są tablice informacyjne:

order [i] - jest tablicą określającą liczbę kolumn, które są uporządkowane - tzn. Jeśli długość tablicy wynosi 1, wykonywany jest sortowanie pojedynczej kolumny, w przeciwnym razie wykonywany jest sortowanie wielokolumnowe.

kolumny [i] - tablica definiująca wszystkie kolumny w tabeli.

W obu przypadkach i jest liczbą całkowitą, która zmieni się, aby wskazać wartość tablicy. W większości współczesnych środowisk skryptowych po stronie serwera dane te będą automatycznie dostępne dla ciebie jako tablica.

Jednak Flask udostępnia te dane jako prosty słownik, czy istnieje sposób na łatwe przekształcenie go w tablicę obiektów?

+1

Czy próbowałeś żądanie .get_json()? Więcej informacji tutaj: http://flask.pocoo.org/docs/api/#flask.Request.get_json – pgorsira

+1

Na początku daje pusty wynik, następnie spróbowałem request.get_json (force = True), a następnie otrzymuję "400 : Zła prośba'. Na razie podpiąłem kod javascript, żeby wysłać dane jako jsonową treść. –

Odpowiedz

9

Get DataTable wysłać JSON

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

W kolbie analizowania JSON

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

Dzięki. Dla celów zapisu, część "Prześlij dane jako JSON w części żądania" została podana [tutaj] (http://datatables.net/manual/ajax) w dokumentacji. –

1

Można użyć tego małego pakietu ładne, że znalazłem https://github.com/bernii/querystring-parser

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

, że repo daje 404 teraz – k107

+0

Link jest teraz ustalony –

Powiązane problemy