我正在使用Django Rest Framework API后端构建单页面Web应用程序。我有发送注册表格的问题。我认为日期格式的方式存在问题。 这是控制器的样子:
(function () {
'use strict';
angular
.module('CityWits')
.controller('standardController', standardController);
standardController.$inject = ['UserService','$location', '$rootScope', 'FlashService'];
function standardController(UserService, $location, $rootScope, FlashService) {
var vm = this;
vm.standard = standard;
function standard() {
vm.dataLoading = true;
var str = [];
for(var p in vm.user){
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(vm.user[p]));
}
str = str.join("&");
UserService.CreateStandard(vm.user)
.then(function (response) {
if (response.success) {
FlashService.Success('Registration successful', true);
$location.path('/sign-in');
} else {
alert(response.message)
vm.dataLoading = false;
}
});
}
function fixDate(date){
}
}
})();
邮报要求:
function CreateStandard(user) {
console.log(user)
return $http.post('http://127.0.0.1:8000/api/users/standard', user).then(handleSuccess, handleError('Error creating user'));
}
从表单发送的json对象:
Object
DATE_OF_BIRTH : 1993年8月6日星期五00:00:00 GMT-0400(东部夏令时间) 名字 : “大卫” 性别 : “M” 姓 : “加洛韦” 用户 : 宾语 电子邮件 : “dcgallo93@gmail.com” 密码 : “*******” 的原 : 宾语 的原 : 对象
答案 0 :(得分:0)
使用JSON.stringify
发送user
对象:
function CreateStandard(user) {
console.log(user)
return $http.post('http://127.0.0.1:8000/api/users/standard', JSON.stringify(user))
.then(handleSuccess, handleError('Error creating user'));
}
答案 1 :(得分:0)
您必须设置HTTP标头"内容类型"如果要发布为JSON字符串,请转到JSON。
否则,数据需要采用 application / x-www-form-urlencoded 的形式,这意味着: parameter = value&amp; also = another < / EM> 强>
DRF文档中突出显示here:
注意:开发客户端应用程序时,请务必确保 您在HTTP中发送数据时设置Content-Type标头 请求。
如果您未设置内容类型,则大多数客户端将默认使用 &#39; application / x-www-form-urlencoded&#39;,这可能不是你想要的。
例如,如果您使用jQuery发送json编码数据 在.ajax()方法中,您应该确保包含contentType: &#39;应用/ JSON&#39;设置。
坦率地说,JSON更清楚,所以我要做的是:
function CreateStandard(user) {
return $http({
method: 'POST',
url: 'http://127.0.0.1:8000/api/users/standard',
data: JSON.stringify(user),
headers: {"Content-Type": "application/json"}
}).then(...);
}