我做了很多搜索,似乎没有什么能够完全解决这个问题。我创建了一个REST API,它有一个发送消息的资源。路径为/api/v1/conversation/{type}/{id}/message
。对该URI发出POST调用将为给定的对话创建一条消息。
如果我只使用$.post('/api/v1/conversation/sample/sample/message', {message: "All your base are belong to us"});
但是,我想使用Restangular,并且出于某种原因,它以我必须使用request.body而不是request.POST.get('message')的方式发送POST数据。如果我必须对每个服务器端API执行此操作,这非常不方便。
这是我的Restangular代码:
conversation = Restangular.one('conversation', scope.type).one(scope.type_id);
conversation.post('message', {message: "All your base..."})
为了澄清,它正在POST到正确的URI,它只是将发布数据作为有效负载而不是表单数据发送。如何配置它以将帖子作为表单数据发送?
编辑: 作为旁注,我能够通过创建实用程序函数来缓解此问题:
def api_fetch_post(request):
post = request.POST
if not post:
try:
post = json.loads(request.body.decode(encoding='UTF-8'))
except:
pass
return post
这样我可以接受任何类型的POST数据。无论如何,有没有办法用Restangular发送表单数据?
答案 0 :(得分:2)
是的,有。
var formData = new FormData();
formData.append('message', $scope.message);
// Or use the form element and have formData = new FormData(formElement).
Restangular.one('conversation', $scope.type).one($scope.type_id)
.withHttpConfig({transformRequest: angular.identity})
.post(formData, null, {'Content-Type': undefined})
.then(function(response){
// Do something with response.
});