Запрос Axios "PUT" возвращает плохой запрос 400
Я пытаюсь обновить профиль пользователя, но получаю 400 bad request. Когда я пробую на postman, он работает нормально.
Мой вызов api (React Native):
// Data
const data = {
header_pic: JSON.stringify(new_header_pic),
avi_pic: JSON.stringify(new_avi_pic),
email: JSON.stringify(new_email),
first_name: JSON.stringify(new_first_name),
last_name: JSON.stringify(new_last_name),
username: JSON.stringify(new_username),
location: JSON.stringify(new_location),
bio: JSON.stringify(new_bio),
url: JSON.stringify(new_url)
};
//Update Profile
const updateProfile = async () => {
console.log(JSON.stringify(data))
try {
await axios.put(url, JSON.stringify(data), {
'headers': {
'Content-Type': 'multipart/form-data',
'Authorization': 'token'
}
}).then(res => {
console.log(res.data)
{res.data === 200} {
navigation.navigate('MyProfile')
}
});
} catch (e) {
console.log(e)
};
}
Если я меняю тип содержимого на application/json, я получаю 415 Unsupported Media Type
Мое представление бэкенда (django):
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
parser_classes = [MultiPartParser, FormParser]
queryset = User.objects.all()
def put(self, request):
user_id = self.request.user
header_pic = request.data.get('header_pic')
avi_pic = request.data.get('avi_pic')
email = request.data.get('email')
first_name = request.data.get('first_name')
last_name = request.data.get('last_name')
username = request.data.get('username')
location = request.data.get('location')
bio = request.data.get('bio')
url = request.data.get('url')
user = User.objects.update(
user_id, header_pic, avi_pic, email, first_name,
last_name, username, location, bio, url
)
user.save()
serializer = UserSerializer(user)
return Response(serializer.data, status=status.HTTP_200_OK)
Благодарю за любую помощь!
Я думаю, что полезная нагрузка, которую вы используете, это string
, но вам нужно использовать ее как object
.
// Update Profile
const updateProfile = async () => {
console.log(JSON.stringify(data))
try {
await axios.put(url, data, { # you don't need to stringify it
'headers': {
'Content-Type': 'application/json', # use application/json
'Authorization': 'token'
}
}).then(res => {
...
});
} catch (e) {
console.log(e)
};
}
И удалите атрибут parser_class
в классе UserViewSet
.