Как использовать localstorage.getItem или setItem для отправки post-запроса в приложении react?
Я использую jwt в бэкенде аутентификации. Согласно учебнику, я смог успешно отправить запрос get во фронтенде react, используя следующий код.
export const load_user = () => async (dispatch) => {
if (localStorage.getItem("access")) {
const config = {
headers: {
"Content-Type": "application/json",
Authorization: `JWT ${localStorage.getItem("access")}`,
Accept: "application/json",
},
};
try {
const res = await axios.get(
`${process.env.REACT_APP_API_URL}/api/auth/users/me/`,
config
);
dispatch({
type: USER_LOADED_SUCCESS,
payload: res.data,
});
} catch (err) {
dispatch({
type: USER_LOADED_FAIL,
});
}
} else {
dispatch({
type: USER_LOADED_FAIL,
});
}
};
Однако, я не могу отправить почтовый запрос, я пробовал придумать свой собственный код, но все еще безрезультатно. Вот мой код:
export const client_information_create =
(age, phone_number, country, city, alergy, gender) => async (dispatch) => {
if (localStorage.getItem('access')) {
const config = {
headers: {
"Content-Type": "application/json",
"Authorization": `JWT ${localStorage.getItem('access')}`,
"Accept": 'application/json'
},
};
const body = JSON.stringify({
age,
phone_number,
country,
city,
alergy,
gender,
});
try {
const res = await axios.post(
`${process.env.REACT_APP_API_URL}/api/list/InformationView/`,
body,
config
);
if (res.data != null){
dispatch({
type: INFORMATION_SUCCESS,
payload: res.data,
});
} else {
dispatch({
type: INFORMATION_FAIL,
});
}
} catch (err) {
dispatch({
type: INFORMATION_FAIL,
});
}
} };
Как мне это сделать?
После дальнейших модификаций я не могу понять, почему данные не сохраняются в базе данных. Когда я console.log(res.data) я получаю, что пользователь уже существует, что не является проблемой согласно Viewcode. Вместо этого он должен вывести все детали, такие как возраст и номер телефона. Вот код моего файла view.py:
class ClientInformationView(APIView):
def get_object(self, pk):
try:
return ClientInformation.objects.get(pk=pk)
except ClientInformation.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
client_information = self.get_object(pk)
serializer = ClientInformationSerializer(client_information)
return Response(serializer.data)
def post(self, request, format=None):
try:
user = self.request.user
if user:
return Response("This Record Already Exists")
else:
information_create = ClientInformation.objects.all()
serializer = ClientInformationSerializer(information_create)
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)
except TypeError:
return Response({
'error':'Something went wrong when creating data'
}, status=status.HTTP_403_FORBIDDEN)
Как вывести сами данные во фронтенде
Изменить это:
const body = JSON.stringify({
age,
phone_number,
country,
city,
alergy,
gender,
});
to
const body = {
age,
phone_number,
country,
city,
alergy,
gender,
};
Наконец, я нашел решение этого вопроса. Я изменил почтовый запрос в представлениях следующим образом:
def post(self, request, format=None):
serializer = ClientInformationSerializer(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)
Позднее я получил эту ошибку: Опция fields должна быть списком, кортежем или "all". Чтобы получить список, я модифицировал ClientInformationSerializer следующим образом:
class ClientInformationSerializer(serializers.ModelSerializer):
class Meta:
model = ClientInformation
fields = ['user', 'age', 'phone_number', 'country', 'city', 'alergy', 'gender']
Однако за все это пришлось заплатить. Я вижу все необходимые данные в панели администратора, но поле имени пользователя, которое является иностранным ключом, пустое. Как мне сохранить текущего залогиненного пользователя в Django из react?