この Django ビューに対して angular.js を使用して POST リクエストを作成しようとしています。
class PostJSON4SlickGrid(View):
"""
REST POST Interface for SlickGrid to update workpackages
"""
def post(self, request, root_id, wp_id, **kwargs):
print "in PostJSON4SlickGrid"
print request.POST
return HttpResponse(status=200)
したがって、このリソースを作成しました。
myModule.factory('gridData', function($resource) {
//define resource class
var root = {{ root.pk }};
return $resource('{% url getJSON4SlickGrid root.pk %}:wpID/', {wpID:'@id'},{
get: {method:'GET', params:{}, isArray:true},
update:{method:'POST'}
});
});
コントローラーでgetメソッドを呼び出すと、正常に機能します。URL は に変換されhttp://127.0.0.1:8000/pm/rest/tree/1/
ます。
function gridController($scope, gridData){
gridData.get(function(result) {
console.log(result);
$scope.treeData = result;
//broadcast that asynchronous xhr call finished
$scope.$broadcast('mySignal', {fake: 'Hello!'});
});
}
update/POST メソッドの実行で問題に直面しています。
item.$update();
URL は に変換されますがhttp://127.0.0.1:8000/pm/rest/tree/1/345
、末尾のスラッシュがありません。URL 定義で末尾のスラッシュを使用しない場合、これは簡単に回避できます。
url(r'^rest/tree/(?P<root_id>\d+)/(?P<wp_id>\d+)$', PostJSON4SlickGrid.as_view(), name='postJSON4SlickGrid'),
それ以外の
url(r'^rest/tree/(?P<root_id>\d+)/(?P<wp_id>\d+)/$', PostJSON4SlickGrid.as_view(), name='postJSON4SlickGrid'),
末尾のスラッシュなしで回避策を使用すると、403 (Forbidden) ステータス コードが表示されます。これは、おそらくPOST 要求でCSRFトークンを渡していないことが原因です。したがって、私の質問は、角度によって作成された POST リクエストに CSRF トークンを渡す方法に要約されますか?
ヘッダーを介してcsrfトークンを渡すこのアプローチについては知っていますが、ここで提案されているように、投稿リクエストの本文にトークンを追加する可能性を探しています。投稿リクエストの本文にデータを追加する角度で可能ですか?
追加の読み物として、リソースに関するこれらの議論、末尾のスラッシュの削除、および現在のリソースの制限: disk1およびdisc2を参照できます。ディスカッションの 1 つで、作成者の 1 人が現在リソースを使用せず、代わりにこのアプローチを使用することを推奨しました。