Правильный способ кодирования параметров запроса между Javascript внешним интерфейсом и Python внутренним - PullRequest
0 голосов
/ 07 января 2020

У меня проблема с декодированием строки запроса между javascript и python.

Моя цель - отправить строку запроса с вложенным объектом внутри нее.

Моя проблема в том, что мой Python API декодирует мою строку запроса в dict со сплющенными ключами.

import qs from qs
import axios from 'axios'

const request = query => axiox.get(`https://localhost:3000/v1/example/test?${qs.stringify(query, {arrayFormat: 'comma' })}`

const queryPayload = {
    someParam: {
        filter: ['example1']
    },
    someOtherParam: { test: ['example2']}
}

request(queryPayload);

Результирующий параметр запроса 'someParam%5Bfilter%5D%5B0%5D=example1&someOtherParam%5Btest%5D%5B0%5D=example2'

Результат

При использовании сокола (api framework) или стандартного urlLib, предоставляемого Python 3, я получаю тот же результат, что означает, что я, вероятно, делаю ладью ie ошибка.

Использование сокола:

import falcon

falcon.uri.parse_query_string('someParam%5Bfilter%5D%5B0%5D=example1&someOtherParam%5Btest%5D%5B0%5D=example2')

Использование urllib:

import urllib

urllib.parse.parse_qs('someParam%5Bfilter%5D%5B0%5D=example1&someOtherParam%5Btest%5D%5B0%5D=example2')

Они оба возвращают меня: {'someParam[filter][0]': ['example1'], 'someOtherParam[test][0]': ['example2']}

Но я на самом деле ожидайте получения

{
    someParam: {
        filter: ['example1']
    },
    someOtherParam: { test: ['example2']}
}

Я относительно новичок в языке, но потратил некоторое время, чтобы попытаться выяснить причину.

Примечание: я также нашел это https://github.com/bernii/querystring-parser, что решило бы проблему, но я нахожу странным иметь конвертер qs и парсер qs, которые следуют отдельным правилам. * 104 0 *

...