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

また、すべての POST 引数にアクセスできますself.request.arguments

于 2012-09-07T07:07:21.690 に答える