Python 向Tornado服务器发送POST请求中的非字符串参数
在Tornado中RequestHandler的Python 向Tornado服务器发送POST请求中的非字符串参数,python,post,tornado,Python,Post,Tornado,在Tornado中RequestHandler的post方法中,self.get_参数(arg,None)获取请求中包含的arg的值 我看到的所有示例都将字符串作为值返回,这让我想知道我们是否可以在POST请求中发送字符串以外的数据 我感兴趣的具体用例是:我有一个表单,页面上有多个字段,我想在向服务器发送的POST请求中,将其字段的子集打包在一个参数中,比如 packed = self.get_argument('packed_arg', None) arg1 = packed['arg1']
post
方法中,self.get_参数(arg,None)
获取请求中包含的arg
的值
我看到的所有示例都将字符串作为值返回,这让我想知道我们是否可以在POST请求中发送字符串以外的数据
我感兴趣的具体用例是:我有一个表单,页面上有多个字段,我想在向服务器发送的POST请求中,将其字段的子集打包在一个参数中,比如
packed = self.get_argument('packed_arg', None)
arg1 = packed['arg1']
arg2 = packed['arg2']
...
而其余字段仍然是单独的参数。到目前为止,我认为数据结构类似于dict(可能是JSON),对于这个压缩参数,这是否可行?JSON将非常适合您的目的 在客户端执行以下操作:
var data = {'packed_arg':get_form_args(); }
函数get\u form\u args()
是抽象的。你可以用任何方式实现它。默认情况下,Javascript对象是JSON。
所以在客户端,您必须从表单字段创建字典。
这样想:
var data = {};
var names_to_pack = ['packed1', 'packed2']
$(form).find('input, select').each(function (i, x) {
var name = $(x).attr('name')
if(names_to_pack.indexOf(name) != -1) {
if(!data.packed) {
data.packed = {};
}
data['packed'][name] = $(x).val();
} else {
data[name] = $(x).val();
}
});
$.post('/', data);
然后在服务器端:
raw_packed = self.get_argument('packed_arg', None)
packed = {}
if raw_packed:
packed = tornado.escape.json_decode(raw_packed)
arg1 = packed.get('arg1')
arg2 = packed.get('arg2')
您还可以访问
self.request.arguments
中的所有POST参数 为什么不将它们作为单独的POST参数发送?@IgnacioVazquez Abrams,要打包到单个参数中的字段集不是固定的。相反,不同的字段将根据表单上的其他固定字段进行打包。我打算以“自定义参数”的名义将它们分组。在客户端,如何将其他数据(即表单上的其他字段)与此packed_arg
一起发布?谢谢。我猜客户端的函数get\u form\u args()
会返回字典吗?