POST-запрос на чтение данных из Flask-restless

Я пытаюсь реализовать фильтрацию на стороне сервера, используя сетку KendoUI и веб-сервис Flask-Restless.

Мой объект источника данных выглядит так:

        var myDataSource = new kendo.data.DataSource({
        transport: {
            read: {
              type: 'GET',
              url: "http://localhost:5000/api/geo",
              contentType: "application/json",
              dataType: "json",
            },
            parameterMap: function(data, type) {
              if (type == "read") {
                // console.log(data.filter);
                return {
                  page: data.page,
                  q: data.filter
                }
              }
            },
        },
        schema: {
          data: 'objects',
          total: "num_results", 
        },
        serverPaging: true,
        serverFiltering: true,
        pageSize: 100,
    }); 

На стороне сервера я хочу перехватить параметры фильтрации, соответствующим образом изменить их, чтобы они соответствовали формату объекта запроса Flask-Restless, и передать их конечной точке REST. Однако, если использовать запрос GET, объект flask.request.args выглядит как уплощенный словарь, который утомительно анализировать. Следующий код в препроцессоре:

 for key, value in flask.request.args.iteritems():
    print '%s : %s' % (key, value)

производит:

q[filters][0][value] : 106
q[filters][1][field] : county_id
q[filters][1][operator] : eq
q[filters][1][value] : 107
q[filters][0][operator] : eq
q[filters][0][field] : county_id
q[logic] : and

Наверное, у меня есть два вопроса: 1. Можно ли использовать POST-запрос для чтения данных из конечной точки Flask-Restless? 2. если ответ на вопрос № 1 - да: как передать объект data.filter из источника данных Kendo в веб-службу Flask-Restless?

У меня есть доступ к flask.reguest.args (в случае запроса GET) внутри препроцессора, однако структура args представляет вложенные объекты в виде строковых ключей, таких как: 'q[filters][0][value]', что трудно разобрать. Я надеюсь, что есть лучший подход.

Спасибо!

1 ответ

РЕДАКТИРОВАТЬ 2 -

Это частично отформатирует ваши данные из запроса типа $.ajax для использования с запросом GET в Flask-Restless. Вы можете использовать это для GET (как вы использовали в своем примере выше), и вам не нужно использовать POST. Надеюсь, это поможет, если нет, то вам нужно будет предоставить дополнительные данные или попытки помочь в правильном направлении. Кроме того, манипулирование все еще нуждается в нескольких шагах (то есть логике) для преобразования. Я думал, что это будет хорошее упражнение для завершения...

Если вы печатаете flask.request.args вы должны получить что-то вроде этого:

import pprint
pprint(q)

# returns this
{'filters': [{'field': 'county_id', 'operator': 'eq', 'value': 106},
         {'field': 'county_id', 'operator': 'eq', 'value': 107}],'logic':'and'}

Тогда вам просто нужно манипулировать им в правильном формате для Restless Search Queries (согласно спецификации), используя некоторые функциональные возможности встроенных модулей.

# Python 3

new_filter = {}
for key, value in q.items():
    if key == 'filters':
        new_filter[key] = []
        for item in q[key]:
            rename_data = {
                     'name': item['field'] ,
                     'op':   item['operator'],
                     'val':  item['value']
                   }
            new_filter[key].append(rename_data)
     else:
         new_filter[key] = value

возвращается...

{'filters': [{'name': 'county_id', 'op': 'eq', 'val': 106},
         {'name': 'county_id', 'op': 'eq', 'val': 107}],
'logic': 'and'}

который затем может быть передан как запрос...

Другие вопросы по тегам