air*_*aft 5 javascript python django django-rest-framework axios
在Axios文档中:
axios.get('/user/12345')
.catch(function (error) {
if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// The request was made but no response was received
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
// http.ClientRequest in node.js
console.log(error.request);
} else {
// Something happened in setting up the request that triggered an Error
console.log('Error', error.message);
}
console.log(error.config);
});
Run Code Online (Sandbox Code Playgroud)
我们知道我们可以赶上error的.catch()方法。
但是当我使用Django-Rest-Framework作为后端API提供程序时。它仅提供数据,其中没有状态:
您会看到error:
{username: ["A user with that username already exists."]}
Run Code Online (Sandbox Code Playgroud)
但在浏览器中,我们可以知道状态码:
在问这个问题之前,我已经阅读了如何从Axios中的http错误获取状态代码? 这个帖子。
但是这个职位与我的似乎不同。
编辑1
在我的Django-Rest-Framework项目中:
风景:
class UserCreateAPIView(CreateAPIView):
serializer_class = UserCreateSerializer
permission_classes = [AllowAny]
queryset = User.objects.all()
Run Code Online (Sandbox Code Playgroud)
序列化器:
class UserCreateSerializer(ModelSerializer):
"""
user register
"""
class Meta:
model = User
fields = [
'username',
'wechat_num',
'password',
]
extra_kwargs = {
"password":{"write_only":True}
}
def create(self, validated_data):
username=validated_data.pop('username')
wechat_num = validated_data.pop('wechat_num')
password=validated_data.pop('password')
user_obj = User(
username=username,
wechat_num=wechat_num,
)
user_obj.set_password(password)
user_obj.save()
group=getOrCreateGroupByName(USER_GROUP_CHOICES.User)
user_obj.groups.add(group)
return validated_data
Run Code Online (Sandbox Code Playgroud)
我在interceptors配置中发现:
Axios.interceptors.response.use(
res => {
return res;
},
error => {
return Promise.reject(error.response.data)
}
);
Run Code Online (Sandbox Code Playgroud)
我直接返回error.response.data,我可以将其配置为error.response, 或error。
如果我配置error.response,那么.catch()我可以像下面这样进行控制台:
console.log(response.data);
console.log(response.status);
console.log(response.headers);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3586 次 |
| 最近记录: |