Я пытаюсь создать запрос POST с помощью angular.js для этого представления Django.
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), который, вероятно, связан с тем, что я не передаю CSRF в запросе POST. Поэтому мой вопрос сводится к тому, как я могу передать токен CSRF в запрос POST, созданный angular?
Я знаю о этом подходе к передаче токена csrf через заголовки, но я ищу возможность добавить токен в тело отправить запрос, как предложено здесь. Возможно ли в angular добавить данные в тело запроса сообщения?
В качестве дополнительных показаний вы можете посмотреть эти обсуждения относительно ресурсов, удалить конечные косые черты и ресурсы ресурсов, которые в настоящее время имеют: disc1 и disc2. В одном из обсуждений один из авторов рекомендовал в настоящее время не использовать ресурсы, но вместо этого используйте этот подход.