2012-09-06 22 views
0

在Tornado中的RequestHandler的post方法中,self.get_argument(arg, None)获取请求中包含的值arg发送POST请求中的非字符串参数到Tornado服务器

我见过的所有例子都返回一个字符串作为值,这让我想知道我们是否可以在POST请求中发送字符串以外的数据。

具体使用情况下,我很感兴趣:我有一个页面上的多个字段的表格,我想在POST请求到服务器的单个参数一起包了场的一个子集,东西像

packed = self.get_argument('packed_arg', None) 
arg1 = packed['arg1'] 
arg2 = packed['arg2'] 
... 

而其余的字段仍然是个别参数。到目前为止,我认为数据结构类似于dict(也许是JSON?),这是否可行?

+0

为什么不将它们作为单独的POST参数发送? –

+0

@ IgnacioVazquez-Abrams,要包装成单个参数的字段集是不固定的。相反,根据表单上的其他固定字段,不同的字段将被打包。我打算以“自定义参数”的名称将它们组合在一起。 – MLister

回答

1

JSON适合您的目的。

做这样的事情,在客户端:

var data = {'packed_arg':get_form_args(); } 

功能get_form_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') 

您也可以访问所有POST ARGS在self.request.arguments

+0

在客户端,我如何将其他数据(即表单上的其他字段)与这个'packed_arg'一起发布?谢谢。 – MLister

+0

我猜客户端的函数'get_form_args()'返回一个字典? – MLister

+0

@MLister更新了我的答案。 –

相关问题