Angularjs 具有django rest框架的Restangular,状态为400
我正在Django中创建新用户,但当我尝试使用现有电子邮件添加用户时,我得到400状态和Angularjs 具有django rest框架的Restangular,状态为400,angularjs,django,python-3.x,django-rest-framework,restangular,Angularjs,Django,Python 3.x,Django Rest Framework,Restangular,我正在Django中创建新用户,但当我尝试使用现有电子邮件添加用户时,我得到400状态和 { "email": ["This field must be unique."] } 在控制台中得到了这个: 我将此配置用于Angular和Django app.config(['$httpProvider', function ($httpProvider) { $httpProvider.defaults.headers.common['X-Requested-With'] = 'X
{
"email": ["This field must be unique."]
}
在控制台中得到了这个:
我将此配置用于Angular和Django
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}]);
app.config(function ($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});
这就是我试图在POST上处理此错误的方式
var users = Restangular.all('users');
users.post({
email: $scope.email,
first_name: $scope.firstname,
last_name: $scope.lastname,
phone: $scope.phone,
password: $scope.password
}).then(function(response){
console.log(response);
alert("done");
},function(response) {
console.log("Error with status code", response.status);
});
版本:
Django==1.8.4
djangorestframework==3.2.4
"angular": "1.4.7",
"restangular": "1.5.1"
有什么想法吗?
UPD
模型序列化程序:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = PUser
def create(self, validated_data):
user = PUser(
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
phone=validated_data['phone']
)
user.set_password(validated_data['password'])
user.save()
return user
PUser模型是Django AbstractUser的副本,但不需要用户名和电子邮件,并且是唯一的通过检查传递到
然后
回调注册函数的第二个函数中的响应来处理400错误。第二个参数是错误处理程序回调函数:
users.post({[...]}).then(
// success server response handler
function(response){
console.log(response);
alert("done");
},
// failure/error server response handler
function(response) {
// debugger; // breakpoint for observing error responses
if (response.data['email'] === 'This field must be unique.']) {
// handle the duplicate email issue
// e.g. display a warning, or a popover, or whatever.
} else {
console.log("Error with status code", response.status);
}
});
如果数据与上述不完全相同,则检查准确的错误:
- 打开调试器(chrome中的ctrl+shift+j)
- 取消对
调试器的注释代码>上面的行
- 重新加载页面
- 发送具有重复电子邮件地址的新用户
请求POST
- 在调试器中检查来自服务器的响应
相应地调整错误响应。答案很接近……原因是lodash软件包,但不是标准软件包。 我通过npm使用了“lodash custom restangular”:“0.0.5”,restangular的工作已经足够好了……除了这个stange行为。 我下载了lodash with bower和所有预期的作品。
Thx致所有人。请发布您的序列化程序。是否要更新现有用户?
POST
用于创建,而不是更新。该错误是User
的Django模型定义中的数据库约束。您不能有两个用户具有相同的电子邮件地址。已使用模型更新帖子。我正在创建新用户,一切正常,但我需要处理电子邮件已使用时的错误建议您在尝试插入和返回更有意义的响应之前检查打印屏幕-您是否在index.html的脚本部分的开头包含lodash?