如何从龙卷风中的嵌套字典和数组中 get_argument

how to get_argument from nested dictionary and array in tornado

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 document,但找不到答案。

mike

WARNING:tornado.general:400 GET /test?host=mike&guests%5Bname%5D%5B%5D=car&guests%5Bname%5D%5B%5D=ball&guests%5Bage%5D%5B%5D=6&guests%5Bage%5D%5B%5D=10&guests%5Bage%5D%5B%5D=7 (::1): Missing argument guests

WARNING:tornado.access:400 GET /test?host=mike&guests%5Bname%5D%5B%5D=car&guests%5Bname%5D%5B%5D=ball&guests%5Bage%5D%5B%5D=6&guests%5Bage%5D%5B%5D=10&guests%5Bage%5D%5B%5D=7 (::1) 1.99ms

您可以将 json object 转换为 json string.

改变

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.

中使用它来做任何事情