Tornado отображает GET и POST аргументы в списки. Как отключить эту функцию?
Класс HTTPRequest в веб-инфраструктуре торнадо * отображает аргументы GET и POST в списки. Я понимаю, почему - если имя аргумента используется несколько раз. Но для некоторых RequestHandlers это боль. Например, если я хочу передать объект json и проанализировать его как есть на сервере.
Какой самый простой способ отключить поведение "список-к-списку", чтобы я мог отправить неизменный json на сервер торнадо/циклона?
* Циклон, на самом деле, там, где есть разница в реализации.
Ответы
Ответ 1
Вместо прямого доступа к self.request.arguments
вы должны использовать функции доступа:
self.get_argument("ID", default=None, strip=False)
Это возвращает один элемент.
Если вы хотите превратить аргументы в объект JSON, вы можете легко сделать это:
json.dumps({ k: self.get_argument(k) for k in self.request.arguments })
Ответ 2
Я собираюсь пойти с "вам не повезло". Вы можете переписать класс, о котором идет речь (похоже, это не будет весело), но помимо этого я не вижу много вариантов.
Я бы просто использовал понимание dict.
{k:''.join(v) for k,v in req.arguments.iteritems()}