AngularJS Django Rest Framework - 试图复制在 400 服务器错误上引发的 JS 对象
AngularJS Django Rest Framework - trying to replicate JS object raised on 400 server error
这是我的 Django Rest Framework 代码/视图,在我尝试注册用户时被调用:
def post(self, request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是我的 AngularJS 注册用户/调用上面发布的 Django 视图的代码:
self.add = function() {
$http.post("/CMS/users", self.user) // this URL calls the Django view posted above
.error(function(data, status, headers, config) {
console.log(data);
for (prop in data) {
console.log(data[prop]);
};
})
.then(fetchUsers); // gets a list of existing users
console.log("User clicked submit with ", self.user);
};
当我尝试注册一个已经存在的用户时,记录如下:
Object {username: Array[1]}
username: Array[1]
0: "This username is already taken. Please, try again"
length: 1
__proto__: Array[0]
concat: concat() { [native code] }constructor: Array() { [native code] }entries: entries() { [native code] }every: every() { [native code] }filter: filter() { [native code] }forEach: forEach() { [native code] }indexOf: indexOf() { [native code] }join: join() { [native code] }keys: keys() { [native code] }lastIndexOf: lastIndexOf() { [native code] }length: 0map: map() { [native code] }pop: pop() { [native code] }push: push() { [native code] }reduce: reduce() { [native code] }reduceRight: reduceRight() { [native code] }reverse: reverse() { [native code] }shift: shift() { [native code] }slice: slice() { [native code] }some: some() { [native code] }sort: sort() { [native code] }splice: splice() { [native code] }toLocaleString: toLocaleString() { [native code] }toString: toString() { [native code] }unshift: unshift() { [native code] }Symbol(Symbol.iterator): ArrayValues() { [native code] }Symbol(Symbol.unscopables): Object __proto__: Object
__proto__: Object
["This username is already taken. Please, try again"] // this is data[prop]
User clicked submit with Object {username: "a", password: "apass", email: "a@hotmail.com"}
我正在尝试复制该对象,因为在我的整个应用程序中,当我提出表单错误时,我想保持一致性并以相同的方式提出错误(其中对象具有字段名称,然后是一个数组,其中包含可以使用 data[prop]).
访问的字符串错误消息
这就是我在 JSfiddle 上尝试的方法:http://jsfiddle.net/snmyvqow/1/
var data = {username: {0: "test."}}
for (prop in data) {
console.log(data);
console.log(data[prop]);
}
问题是,上面的代码将此记录到控制台:
Object {username: Object}
username: Object
0: "This username is already taken. Please, try again"
__proto__: Object
__proto__: Object
Object {0: "This username is already taken. Please, try again"} // this is data[prop]
注意 data[prop] 是不同的,即使我试图以相同的形式重新创建对象。我注意到的另一个区别是,在我的应用程序中,记录了数组内部数组的长度,如下所示:
length: 1
但是在我的 JSfiddle 代码中,没有记录长度。我注意到的最后一个区别是,在我的 JSfiddle 代码中,数组内的数组称为对象,而在我的应用程序中,数组内的数组称为 Array[1]。知道为什么吗?以及我如何重新创建对象/数组,以便 data[prop] 将 return 字符串而不是 returning
Object {0: "This username is already taken. Please, try again"}
?
Python Django serializer.errors (Read Here) 默认情况下 return 对象内部的数组形式。这意味着它应该 return 如下你的情况。
var data = {username: ["This username is already taken. Please, try again"]}
如果要检查,请打开开发工具并查看“响应”选项卡。
这是我的 Django Rest Framework 代码/视图,在我尝试注册用户时被调用:
def post(self, request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是我的 AngularJS 注册用户/调用上面发布的 Django 视图的代码:
self.add = function() {
$http.post("/CMS/users", self.user) // this URL calls the Django view posted above
.error(function(data, status, headers, config) {
console.log(data);
for (prop in data) {
console.log(data[prop]);
};
})
.then(fetchUsers); // gets a list of existing users
console.log("User clicked submit with ", self.user);
};
当我尝试注册一个已经存在的用户时,记录如下:
Object {username: Array[1]}
username: Array[1]
0: "This username is already taken. Please, try again"
length: 1
__proto__: Array[0]
concat: concat() { [native code] }constructor: Array() { [native code] }entries: entries() { [native code] }every: every() { [native code] }filter: filter() { [native code] }forEach: forEach() { [native code] }indexOf: indexOf() { [native code] }join: join() { [native code] }keys: keys() { [native code] }lastIndexOf: lastIndexOf() { [native code] }length: 0map: map() { [native code] }pop: pop() { [native code] }push: push() { [native code] }reduce: reduce() { [native code] }reduceRight: reduceRight() { [native code] }reverse: reverse() { [native code] }shift: shift() { [native code] }slice: slice() { [native code] }some: some() { [native code] }sort: sort() { [native code] }splice: splice() { [native code] }toLocaleString: toLocaleString() { [native code] }toString: toString() { [native code] }unshift: unshift() { [native code] }Symbol(Symbol.iterator): ArrayValues() { [native code] }Symbol(Symbol.unscopables): Object __proto__: Object
__proto__: Object
["This username is already taken. Please, try again"] // this is data[prop]
User clicked submit with Object {username: "a", password: "apass", email: "a@hotmail.com"}
我正在尝试复制该对象,因为在我的整个应用程序中,当我提出表单错误时,我想保持一致性并以相同的方式提出错误(其中对象具有字段名称,然后是一个数组,其中包含可以使用 data[prop]).
访问的字符串错误消息这就是我在 JSfiddle 上尝试的方法:http://jsfiddle.net/snmyvqow/1/
var data = {username: {0: "test."}}
for (prop in data) {
console.log(data);
console.log(data[prop]);
}
问题是,上面的代码将此记录到控制台:
Object {username: Object}
username: Object
0: "This username is already taken. Please, try again"
__proto__: Object
__proto__: Object
Object {0: "This username is already taken. Please, try again"} // this is data[prop]
注意 data[prop] 是不同的,即使我试图以相同的形式重新创建对象。我注意到的另一个区别是,在我的应用程序中,记录了数组内部数组的长度,如下所示:
length: 1
但是在我的 JSfiddle 代码中,没有记录长度。我注意到的最后一个区别是,在我的 JSfiddle 代码中,数组内的数组称为对象,而在我的应用程序中,数组内的数组称为 Array[1]。知道为什么吗?以及我如何重新创建对象/数组,以便 data[prop] 将 return 字符串而不是 returning
Object {0: "This username is already taken. Please, try again"}
?
Python Django serializer.errors (Read Here) 默认情况下 return 对象内部的数组形式。这意味着它应该 return 如下你的情况。
var data = {username: ["This username is already taken. Please, try again"]}
如果要检查,请打开开发工具并查看“响应”选项卡。