Всегда получайте None из запроса Django api в качестве результата

Я собираюсь получить whitebg_url результат из базы данных sqlite в соответствии с совпадающими элементами и сделал api запрос используя django следующим образом.

@api_view(['POST'])
def getUrlFromAttributes(request):

    try: 
        print('>>>>>>>>>>>>>>>>>>>>>', request)
        hairstyle = request.data.get("hairstyle")
        haircolor = request.data.get("haircolor")
        skincolor = request.data.get("skincolor")
        print("error>>1", str(hairstyle), str(haircolor), str(skincolor))

        basic_query = BasicSetup.objects.all().filter(skin_color=skincolor, hair_color=haircolor, hair_style=hairstyle, isDeleted= 0)
        print('returned basic queyr : ', basic_query)
        lists_basicSetup = list(basic_query.values( 'whitebg_url'))
        print('returned lists_basicSetup : ', lists_basicSetup)
        return JsonResponse({'result': lists_basicSetup})       
    except Exception as error:
        print("error", str(error))       
        return JsonResponse({'result': str(error)})

Но как вы можете видеть результат на изображении ниже, ответ всегда None. Я пытался найти решение в google, но не смог этого сделать.

enter image description here

Я уже добавил rest_framework в INSTALLED_APPS в settings.py файл.

и путь подобен определенному. path('getUrlFromAttributes', views.getUrlFromAttributes, name='getUrlFromAttributes'),

Я пытался сделать это с помощью Postman, но результат тот же.

enter image description here

Кто-нибудь знает, почему я получаю None в результате?

Параметры GET не сохранены в request.data. Проверьте request.GET. См. документацию

Вы можете получить тело запроса в виде байтов и разобрать его с помощью JSONParser.
. Я только что отредактировал ваш код следующим образом:

import io
from rest_framework.parsers import JSONParser

# Create your views here.
@api_view(['POST'])
def getView(request, *args, **kwargs):

    try: 
        # you can get byte data from request body
        print('>>>>>>>>>>>>>>>>>>>>>', request.body)

        # get bytes and parse using json 
        # do these before
        byte_body = io.BytesIO(request.body)
        parsed_body = JSONParser().parse(byte_body)
        
        hairstyle = parsed_body.get("hairstyle")
        haircolor = parsed_body.get("haircolor")
        skincolor = parsed_body.get("skincolor")
        print("error>>1", str(hairstyle), str(haircolor), str(skincolor))

        basic_query = BasicSetup.objects.all().filter(skin_color=skincolor, hair_color=haircolor, hair_style=hairstyle, isDeleted= 0)
        print('returned basic query : ', basic_query)
        lists_basicSetup = list(basic_query.values( 'whitebg_url'))
        print('returned lists_basicSetup : ', lists_basicSetup)
        return JsonResponse({'result': lists_basicSetup})       
    except Exception as error:
        print("error", str(error))       
        return JsonResponse({'result': str(error)})

Просто как друг, если можете, используйте представления и сериализаторы на основе классов.

Image with post parameters in url

Посмотрите на (ваше) изображение выше. Вы заметили в url параметры Hairstyle, haircolor skincolor, etc?

Это происходит при GET-запросе. Да, журнал показывает POST, что означает, что событие POST действительно произошло.

Есть вероятность, что ваши данные на самом деле не POSTed, поэтому вы не получаете их в функции представления.

Предложения:

  1. Проверьте ваш JS файл, отвечающий за POSTing (вы можете поделиться здесь, если хотите).
  2. Попробуйте взять параметры из url (метод GET, если информация не чувствительна), если ваш POSTing не работает, просто чтобы проверить мою теорию.

request.query_params

  1. Прочитайте еще раз Django RestFrameworks oc
Вернуться на верх