2015-07-19 50 views
2

我正在使用AngularJS以及Python & Django和Django REST API。有一個由REST API創建的JSON文件,我需要使用Angular $ http.post()將數據發佈到它。使用JSON將數據從Angular.js發佈到Django REST API

我需要知道它是否可能。

林majorly上後得到403(禁止)和400(錯誤請求)錯誤..

$http({ 
     method: 'POST', 
     url: '<JSON FILE URL>', 
     data: $scope.tmpDataSet, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'} 

}}); 

這是我的。員額()方法。在那裏im從一個形式的角度獲取數據,並將其存儲在'tmpDataSet'中。它被正確創建並能夠存儲到數組中。我只是無法將其寫入JSON文件。

我的JSON文件的結構是

{ 
    "count": 6, 
    "next": null, 
    "previous": null, 
    "results": [ 
     { 
      "name": "fff", 
      "mobile_no": "fff", 
      "email": "[email protected]", 
      "message": "dfdf", 
      "id": 1 
     }, 
     { 
      "name": "asd", 
      "mobile_no": "0987654321", 
      "email": "[email protected]", 
      "message": "no", 
      "id": 2 
     } 
] 

如果需要更多的代碼細節請評論。

回答

1

這問題可以通過將CSRF令牌添加到角度應用程序並使用常規的$http.post()樂趣來解決與所有參數一起使用。

app.config(function($httpProvider) { 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
}); 

和,

$http.post('<URL>', item).error(function(data,status,headers,config){ 
      console.log('COULDNT POST!'); 
     }).success(function(data, status, headers, config){ 
      console.log('POSTED!'); 
     }); 
+0

哈哈..我現在知道了。 #MyFrontEndDeveloper &&合作伙伴 –

0

有一些奇怪的這個說法:

存在通過REST API創建的JSON文件,我需要將數據上傳到它採用了棱角分明$ http.post()。

如果您要將數據發佈到Django,您需要爲該視圖定義視圖和URL路由。喜歡的東西:

def page(request): 
    if request.POST: 
      .... do stuff with POST data 

注意,你有POST數據到一個視圖,如果你的文件系統的一個簡單的JSON文件,你不能張貼JSON將它添加數據。

+0

我已經使用Django的REST框架來創建API,其提供類似的GET,POST功能。它將數據序列化爲JSON格式。我ANgular消費API,現在我在Angular中使用POST函數,我是否仍然需要創建一個函數來接受django視圖中的數據? –

+0

您的POST請求是否應該修改服務器上的數據,或者您是否像使用GET一樣使用它?如果它修改了任何內容,那麼你需要編寫服務器端代碼。 – browskie

+0

它應該將數據添加到數據庫。 –

0

$ scope.tmpDataSet是怎麼樣的?既然你指定的內容類型爲網址編碼,

headers: {'Content-Type': 'application/x-www-form-urlencoded'} 

這表明,因爲你可能被傳遞一個JS對象/數組作爲請求的身體在你的後端接收到的數據是不正確的。這將解釋您收到的400錯誤請求。

URL編碼數據應在

Key=Value+One&Key2=Value+Two 

形式,其中+表示空格。

如果您正在使用jQuery,你可以嘗試使用$.param()轉換Java對象到URL編碼字符串

防爆

$http({ 
    method: 'POST', 
    url: '<JSON FILE URL>', 
    data: $.param($scope.tmpDataSet), 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
}}); 

否則試試這個答案

https://stackoverflow.com/a/24964658/3371851

+0

我試過這樣做,但我得到一個錯誤 - $沒有定義。 –

+0

然後你不使用jQuery?在你的html文件之前添加這個 soaP

+0

這幫助了很多,我能夠通過使用POST數據崗位職能有效地發揮作用。 :) –

相關問題