如何从在龙卷风嵌套字典和阵列get_argument

问题描述 投票:3回答:1

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()

在服务器端的输出如下所示。显然,“主机”的说法被顺利地拿到了,但我不知道如何获得一个参数,它的值是一个复杂的对象本身(比如一个数组或字典)。请解释一下这些类型转换的机制和数据结构和它们的字符串表示之间转储?我读了tornado document,但我无法找到答案。

麦克风

警告:tornado.general:400 GET /测试主机=迈克&嘉宾%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 /测试主机=迈克&嘉宾%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.99ms

javascript python-3.x tornado
1个回答
2
投票

您可以将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的任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.