如何从龙卷风中的嵌套字典和数组中 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.
中使用它来做任何事情
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.