Я использую интерфейс React, взаимодействующий с бэкэндом DRF (Django Rest Framework).
В настоящее время оба работают на своих собственных серверах разработки, поэтому они работают в отдельных доменах.
Я отправляю данные из внешнего интерфейса на сервер, используя метод POST, используя Axios для отправки запроса.
Код, который я использую, можно увидеть ниже.
Проблема:
Кажется, что Django не получает POST-данные.
Как видно из кода ниже, я пытаюсь распечатать полученные данные, но этовот что я вижу в консоли:
[12/Jun/2018 13:33:17] "OPTIONS /order/create HTTP/1.1" 200 0
request.POST:
<QueryDict: {}>
[12/Jun/2018 13:55:47] "POST /order/create HTTP/1.1" 200 2
(кажется нормальным, что печатная информация идет первой в консоли, а строка для этого запроса POST после этого. Даже если оператор print выполняетсяпо запросу POST, а не по запросу OPTIONS. Это поначалу немного смутило меня.)
То, что я уже пробовал:
Я пытался добавить следующий заголовок:
headers: {'Content-Type': 'application/json'}
Я пытался добавить:
withCredentials: true
(закомментировано в моем коде, внизу, если этот пост)
Первоначально это дало мне ошибку об ответе на предпечатный запрос, не содержащий Access-Control-Allow-Credentials 'заголовок со значением' true '.И эту ошибку я исправил, добавив следующее:
CORS_ALLOW_CREDENTIALS = True
(из приложения Django-cors-headers, установите это в settings.py) https://github.com/ottoyiu/django-cors-headers
и затем добавьте вручнуюзаголовок моего ответа:
response['Access-Control-Allow-Credentials'] = 'true'
Я уже исследовал части о CORS прежде, но снова я прочитал страницу ниже.Кажется, он не дает ответа.
https://www.html5rocks.com/en/tutorials/cors/
Код аксиоса:
checkoutCart: function(submittedValues, products) {
console.log("checkoutCart")
console.log(submittedValues)
console.log(products)
// let data = {
// formData: submittedValues,
// productData: products,
// }
return axios({
method: 'post',
url: 'http://127.0.0.1:8000/order/create',
data: {
formData: submittedValues,
productData: products,
},
headers: {'Content-Type': 'application/json'},
//withCredentials: true,
})
.then(function(response) {
console.log(response)
})
.catch(function(error) {
console.log("error", error)
})
}
Вид Django:
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def handle_order(request):
if request.method == 'POST':
print("request.POST:")
print(request.POST)
response = JsonResponse({})
response['Access-Control-Allow-Credentials'] = 'true'
return response