Axios post request не отдает никаких данных представлению django

Я пытаюсь сделать свой первый запрос на пост с помощью axios к представлению Django, которое принимает как POST, так и GET. Я получаю пустой dict из request.POST:

<QueryDict: {}>
[13/Aug/2022 16:44:00] "POST /users/114260670592402026255 HTTP/1.1" 200 9

Сервер действительно возвращает код состояния 200, но данные, которые я отправил из пользовательского интерфейса, отсутствуют.

У меня есть следующее представление django:

from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

import json

from .models import UserProfile

@csrf_exempt
def get_user_profile(request, user_id):
    if request.method == 'GET':
        try:
            user = UserProfile.objects.get(user_id=user_id)
            print("user found")
        except Exception as error:
            print("User profile wasnt found:")
            print(error)
            user = None
            profile = UserProfile()
            profile.user_id = user_id
            profile.searches = [
                {'search_term': 'hd'},
                {'search_term': 'wba'},
            ]
            profile.save()
            print("user saved in db")
            user = UserProfile.objects.get(user_id=user_id)

        data = {
            'user_id': user.user_id,
            'searches': user.searches
        }
        json_data = json.dumps(data)
        return HttpResponse(json_data, content_type='application/json')
    if request.method == 'POST':
        data = request.POST
        print(data)
        return HttpResponse("it worked")

в приложении пользовательского интерфейса, SearchPage.js:

  useEffect(() => {
    console.log("user id changed")
    if (userId) {
      const user_profile_api_url = BASE_URL + '/users/' + userId
      axios.get(user_profile_api_url, {})
        .then(response => {
          const recent_searches_response = response.data.searches;
          const new_recent_searches = [];
          recent_searches_response.map(dict => {
            new_recent_searches.push(dict.search_term)
          })
          setRecentSearches(new_recent_searches);
        })
        .catch((error) => {
          console.log("error in getting user profile: ", error.message)
        })
    }
  }, [userId])

  useEffect(() => {
    const user_profile_api_url = BASE_URL + '/users/' + userId
    const data = {searches: recentSearches}
    // axios.post(user_profile_api_url, {
    //   params: {
    //     searches: recentSearches
    //   }
    // })
    axios.post(user_profile_api_url, data
    })
      .then(response => {
        console.log(response)
      })
  }, [recentSearches])

Как вы можете видеть, я передаю его обычным способом, как второй аргумент, затем я также пробую передать его так, как это делает курс Udemy, используя клавишу params. Ни то, ни другое не работает. Я подозреваю, что причиной проблемы может быть @csrf_exempt, но я следую тому же формату, что и все примеры в Интернете. Я хочу получить данные recentSearches из запроса post в представлении Django

Ответ сервера после выполнения запроса:

enter image description here

вкладка сети

enter image description here

axios is async

Вы можете позвонить, например, по телефону

useEffect( async () => {
    const user_profile_api_url = BASE_URL + '/users/' + userId
    const data = {searches: recentSearches}
   const response = await axios.post(user_profile_api_url, data)

console.log(response)
  }, [recentSearches])

больше копания привело к документации Django по http-запросам, мне следовало начать с этого, а не с примеров сторонних производителей

print(request.body)

данные можно найти в request.body в представлении django и преобразовать в объект python, загрузив json

b'{"searches":["hd","wba","psec"]}'
Вернуться на верх