3

2つのPOST呼び出しを作成しています。1つはdjangoフォームを使用し、もう1つはリソースxhrを介してangularjsを使用します。

角度設定は次のようになります。

myModule.factory('gridData', function($resource) {
    //define resource class
    var root = {{ root.pk }};
    var csrf = '{{ csrf_token }}';
    return $resource('{% url getJSON4SlickGrid root.pk %}:wpID/', {wpID:'@id'},{
            get: {method:'GET', params:{}, isArray:true},
            update:{method:'POST', headers: {'X-CSRFToken' : csrf }}
    });
});

xhr postリクエストをそのように作成すると:

item.$update();

このPOSTリクエストは期待どおりにサーバーに送信されますが、 QueryDictにアクセスしたい場合、以下を使用して渡されたデータにアクセスできません。

name = request.POST.get('name', None)

nameいつもNoneこんな感じです。

この背後にある問題は、QueryDictオブジェクトが非常に奇妙に解析されていることです。

 print request.POST
<QueryDict: {u'{"name":"name update","schedule":0"}':[u'']}>

「通常の」Postリクエストを介してデータを送信したときに得られたこの結果を期待していましたが、次のようになります。

<QueryDict: {u'name': [u'name update'], u'schedule': [u'0']}>

したがって、DjangoはPOSTリクエストで、パラメータを1つの文字列に解析するように指示する何かを受け取ったようです。これを回避する方法はありますか?

アップデート:

MULTIPART_CONTENT以外のコンテンツタイプを指定すると、パラメータが1つの文字列に解析されることが問題であると彼らが言っているこの議論を見つけました。POSTリクエストでcontent-typesendを確認しましたが、実際にはに設定されてい'CONTENT_TYPE': 'application/json;charset=UTF-8'ます。したがって、これが問題である可能性があります。したがって、私の質問は次のとおりです。angular.jsリソースを使用して作成されたxhr postリクエストのCONTENT_TYPEをどのように設定できMULTIPART_CONTENTますか?

4

1 に答える 1

5

次のいずれかを実行できます。

Angular のドキュメントでは、リクエストとレスポンスの変換について説明しています。

これらの変換をローカルでオーバーライドするには、変換関数を構成オブジェクトの transformRequest および/または transformResponse プロパティとして指定します。デフォルトの変換をグローバルにオーバーライドするには、$httpProvider の $httpProvider.defaults.transformRequest および $httpProvider.defaults.transformResponse プロパティをオーバーライドします。

以前に指摘されたように、ここで例を見つけることができます。

于 2012-10-11T09:03:42.150 に答える