Как правильно отправить json body с axios из React в Django Rest Api?
Я пытаюсь отправить пост-запрос к моему django rest API с помощью Axios из react frontend.
Home.js
Здесь я получаю значение из формы, устанавливаю состояние и отправляю значение в функцию, которая будет вызывать API при submit
const [query, setQuery] = useState({
search: "",
})
const { search } = query;
// function handle submit
const onSubmit = (e) => {
e.preventDefault();
console.log(search);
navigate(`/search/${search}`);
fetchSearch(search); //fucntion that deals with the api call
};
searchApi.js эта функция работает с вызовом api
export const fetchSearch = async (search) => {
console.log("the data being recieved ", search);
const config = {
header: {
"Content-Type": "application/json",
},
};
const body = JSON.stringify({ search }); // 1
const body = { // 2
search: search,
};
console.log("this is the body", body);
try {
let response = await axios.post(`${url}/get-teacher/`, body, config);
console.log(response.data);
} catch (error) {
console.log(error);
}
};
Теперь позвольте мне рассказать вам о проблеме, с которой я столкнулся, как показано выше, у меня есть комментарии рядом с body. Если я отправляю body //1 в качестве запроса, то django выдает эту ошибку, и я получаю внутреннюю ошибку сервера
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
А если я отправляю body //2 как запрос, то все работает отлично.
представление, которое обрабатывает запрос
@api_view(['POST'])
def search(request):
query = request.data.get('search')
print("this is the query recieved" ,query)
if query is not None:
try:
user = TeacherDetail.objects.filter(is_verified= True)
# to chain lookups to query multiple fields at once
lookups = Q(name__icontains = query) | Q(location__icontains = query) | Q(full_address__icontains = query) | Q(name_of_school__icontains = query) | Q(experience__icontains = query) | Q(teach_for_no_days__icontains = query) | Q(subject__icontains = query) | Q(shift__icontains = query) | Q(teach_class__icontains = query) | Q(board__icontains = query)
user = user.filter(lookups)
serializer = TeacherDetailSerializer(user, many = True)
return Response(serializer.data)
except Exception as e:
e = str(e)
return Response({'status':status.HTTP_404_NOT_FOUND, "message": e})
else:
response = {
"message": "Query is empty",
"status": status.HTTP_404_NOT_FOUND
}
Я хочу знать, почему это происходит, потому что когда я console.log() body //1 отображается
{"search":"swastika"}
именно это мы и отправляем в тело запроса.
Пожалуйста, поправьте меня, где я ошибаюсь, и скажите, как правильно отправить тело в формате JSON