Как правильно отправить 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

Вернуться на верх