我已经解决了我的问题,但我想知道出了什么问题所以我将来可以解决它。我在解码传入的JSON时遇到问题,无法在我的Flask应用程序中使用。
以Angular发送它的代码:
$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!");
});
重要的是要注意,请求类型早先设置为application / json,
$http.defaults.headers.post["Content-Type"] = "application/json";
在Flask中接收它的代码:
data = request.get_json()
email_address = data.get("email_address")
password = data.get("password")
尝试以这种方式加载它会返回错误400,但任何其他方式都会导致一些非常奇怪的问题。例如:
return json.dumps(request.get_json())
将在控制台中记录{“password”:“password”,“email_address”:“email@email.com”},但尝试执行此操作:
data = request.get_json()
email_address = data.get("email_address")
password = data.get("password")
除了我没有强制它之外,这与第一个代码块之间没有任何区别,我收到异常“ValueError:需要多于1个值来解包”。这意味着没有两个值可以解包。
但是,他们都是单独工作的。如果我执行上述请求并省略上面的data.get()行,则另一个将起作用。
我的设置如何导致我的JSON对象在第一次访问时崩溃?
我通过使用request.json而不是request.get_json()来解决这个问题,但是因为request.json已被弃用,所以我知道如何在将来解决这个问题。任何指针都将不胜感激!
答案 0 :(得分:0)
您可以省略JSON.stringify
并将对象直接传递给$http.post()
方法,因为angular会自动将其序列化为JSON,formData
是对象。因此,我认为JSON.stringify
会强制发送角度为x-www-form-urlencoded
而不是application/json
媒体类型。
请参阅默认转换部分:angular $http service documentation