POST работает с почтальоном, а не через fetch в JavaScript - PullRequest
0 голосов
/ 22 февраля 2019

Почтовый запрос к структуре API Django Rest работает через Postman, когда соответствующие параметры указаны в разделе «body».Но то же самое не работает со следующим кодом JavaScript:

var data = {emp_id:50,emp_name:'test',password:'pass123'};   
fetch('http://127.0.0.1:8000/signup/',{
    method:"POST",
    body: JSON.stringify(data),
    mode:"no-cors",
     headers: {
                "Content-Type": "application/json",
                // "Content-Type": "application/x-www-form-urlencoded",
            },
    })
    .then(response => response.json());

Ниже приводится определение, которое обрабатывает запрос POST в views.py REST-API:

@api_view(['GET', 'POST', ])
def signup(request):
    serializer = employeeSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Я новичок в этом, может кто-нибудь сказать мне, почему код JavaScript не будет работать?

РЕДАКТИРОВАТЬ: ошибка, которую показывает консоль браузера:

POST http://127.0.0.1:8000/signup/ 415 (Unsupported Media Type)

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Проблема в том, что при использовании режима no-cors вы ограничиваетесь использованием простых запросов , которые, в свою очередь, не могут иметь тип содержимого, отличный от application/x-www-form-urlencoded, multipart/form-data или text/plain.Фактически, если вы посмотрите на заголовки, отправленные браузером вместе с вашим запросом, вы увидите, что тип контента изменяется с application/json на text/plain - отсюда и ошибка.

Чтобы исправить вашу проблему:удалите режим no-cors и добавьте заголовки cors к ответам в вашем приложении django.Для этого вы можете использовать django-cors-headers .

Кроме того, у вас нет проблем с почтальоном, потому что его не волнует политика того же происхождения .

0 голосов
/ 22 февраля 2019

Попробуйте изменить заголовки на

headers: { 
    'Accept': 'application/json',
    'Content-Type': 'application/json' 
}

Заголовок подтверждения используется, чтобы определить, в каком формате отправлять данные обратно клиенту в ответе, предположите, что это может быть необходимо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...