2014-10-18 53 views
0

我已經解決了我的問題,但我想知道發生了什麼問題,因此我可以在將來處理它。我正在解碼傳入的JSON以用於我的Flask應用程序。使用Flask和Angular加載JSON的錯誤

發送它在角的代碼:

$http.post("/login", JSON.stringify($scope.loginForm)) 
    .success(function(data, status, headers, config) { 
    console.log(data); 
    }) 
    .error(function(data, status, headers, config) { 
    console.log("Submitting form failed!"); 
    }); 

重要地注意到,請求類型被設置爲應用/ JSON較早起來,用

$http.defaults.headers.post["Content-Type"] = "application/json"; 

接收的代碼它在燒瓶內:

data = request.get_json() 
email_address = data.get("email_address") 
password = data.get("password") 

試圖以這種方式加載它會返回一個錯誤400,但任何其他方式都會導致一些非常奇怪的問題。例如:

return json.dumps(request.get_json()) 

將記錄{ 「密碼」: 「密碼」, 「EMAIL_ADDRESS」: 「[email protected]」}在控制檯,而是試圖做到這一點:

data = request.get_json() 
email_address = data.get("email_address") 
password = data.get("password") 

除了我不強制它之外,它和第一塊代碼之間沒有什麼區別,我收到異常「ValueError:需要多個值才能解包」。這意味着解壓縮沒有兩個值。

然而,他們都單獨工作。如果我執行上述請求並省略上面的data.get()行中的任何一個,則另一個將工作。

我的設置怎麼樣導致我的JSON對象第一次被分解訪問?

我通過使用request.json而不是request.get_json()來解決這個問題,但是由於request.json被棄用,這是相當重要的,我知道如何在將來解決這個問題。任何指針將不勝感激!

回答

0

您可以省略JSON.stringify並將對象直接傳遞給$http.post()方法,因爲angular會自動將其序列化爲JSON它是formData是對象。所以我假設JSON.stringify會強制發送角度爲x-www-form-urlencoded而不是application/json媒體類型。

查看默認轉換部分:angular $http service documentation