как получить_аргумент из вложенного словаря и массива в торнадо - PullRequest
0 голосов
/ 03 февраля 2019

JavaScript клиент отправляет запрос следующим образом:

$.ajax({
    url: 'http://localhost:7973/test',
    type: 'GET',
    data: {'host': 'mike', 'guests': {'name': ['car', 'ball'], 'age': [6, 10, 7]}},
    success: function(result){alert(result)},
    error: function(error){alert(error)}
});

Python запрос на обработку сервером с использованием tornado:

import tornado.ioloop
import tornado.web


class TestHandler(tornado.web.RequestHandler):
    def get(self):
        host = self.get_argument('host')
        print(host)
        guests = self.get_argument('guests')
        print(guests)


def make_app():
    return tornado.web.Application([
        (r'/test', TestHandler)
    ])


if __name__ == "__main__":
    app = make_app()
    port = 7973
    app.listen(port)
    print('-' * 100)
    print('server started, listening to ', port, '...\n')
    tornado.ioloop.IOLoop.current().start()

Выходные данные на стороне сервера указаны ниже,По-видимому, аргумент 'host' успешно получен, но я понятия не имею, как получить аргумент, значением которого является сам сложный объект (скажем, массив или словарь).Пожалуйста, объясните мне механизм этих приведений и дампов между структурами данных и их строковым представлением?Я прочитал документ tornado , но не смог найти ответ.

mike

ПРЕДУПРЕЖДЕНИЕ: tornado.general: 400 GET / test?хост = микрофон и гости% 5Bname% 5D% 5B% 5D = автомобиль и гости% 5Bname% 5D% 5B% 5D = шарик и гости% 5Bage% 5D% 5B% 5D = 6 & гости% 5Bage% 5D% 5B% 5D = 10 & гости% 5Bage% 5D% 5B%5D = 7 (:: 1): пропущенные аргументы: гости

ВНИМАНИЕ: tornado.access: 400 GET / test? Host = mike & guest% 5Bname% 5D% 5B% 5D = машина и гости% 5Bname% 5D% 5B% 5D= мяч и гости% 5Bage% 5D% 5B% 5D = 6 и гости% 5Bage% 5D% 5B% 5D = 10 и гости% 5Bage% 5D% 5B% 5D = 7 (:: 1) 1,99 мс

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете преобразовать свой объект json в строку json .

изменить

data: {'host': 'mike', 'guests': {'name': ['car', 'ball'], 'age': [6, 10, 7]}}, 

в

data: JASON.stringify({'host': 'mike', 
                       'guests': {'name': ['car', 'ball'], 
                                  'age': [6, 10, 7]}}),

, а затем на стороне сервера вы можете сделать:

guests_string = self.get_argument('guests')
guests = json.loads(guests_string)

guests должен быть словарем, с которым вы можете делать все, что угодно в Python.

...