在Tornado的RequestHandler的post
方法中,self.get_argument(arg, None)
获取请求中包含的arg
值。
我看到的所有示例都返回一个字符串作为值,这让我想知道我们是否可以在POST请求中发送除字符串之外的数据。
我感兴趣的特定用例:我在页面上有一个包含多个字段的表单,我希望在POST请求中将其字段的一部分组合在一个参数中服务器,像
packed = self.get_argument('packed_arg', None)
arg1 = packed['arg1']
arg2 = packed['arg2']
...
而其他字段仍然是个别参数。到目前为止,我认为这个打包参数的数据结构类似于dict
(也许是JSON?),这是否可行?
答案 0 :(得分: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
中的所有POST参数。