0

postTornado 的 RequestHandler 方法中,self.get_argument(arg, None)获取arg请求中包含的值。

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

我感兴趣的具体用例:我在页面上有一个包含多个字段的表单,我想在对服务器的 POST 请求中将其字段的一个子集打包到一个参数中,例如

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

而其余的字段仍然是单独的参数。到目前为止,dict对于这个打包的参数,我正在考虑类似于(也许是 JSON?)的数据结构,这可行吗?

4

1 回答 1

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

您还可以访问self.request.arguments.

于 2012-09-07T07:07:21.690 回答