Я пытаюсь делать вызовы API локально в приложении реагирования, используя axios.
Я уже добавил django-cors-headers и следовал документации, но, похоже, она не работает.
Я всегда получаю сообщение об ошибке:
localhost /: 1 Доступ к XMLHttpRequest в «http://127.0.0.1:8000/api/todos/' из источника» http://localhost:3000' заблокирован политикой CORS: заголовок запросаAccess-Control-Allow-Headers в поле access-control-allow-origin не разрешен в ответе перед полетом.
my base.py:
INSTALLED_APPS = [
# ...
"corsheaders",
"rest_framework",
"todo",
"api",
]
MIDDLEWARE = [
# ...
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware",
# ...
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = False
В моем приложении реакции:
const [todos, setTodos] = useState({})
useEffect(
() => {
axios.get(
api_url, {
headers: {
"Access-Control-Allow-Origin": "*",
}
}
).then(
res => {
setTodos(res.data);
console.log(res.data)
}
).catch(
err => {
console.log(err)
}
)
}, []
)
Обратите внимание, что даже без настройки белого списка и возврата настроек CORS к:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
Мне все еще удается получить данные в вызове get с использованием httpie, просто запустив http + url.
Примечание 2. Когда axios пытается получить данные, я получаю их на терминале, на котором запущено приложение Django:
[04 / Jun / 2019 18:15:29] "ОПЦИИ /api / todos / HTTP / 1.1 "200 0
ВАЖНОЕ РЕДАКТИРОВАНИЕ: Проблема, похоже, не с моим сервером, я использовал fetcч вместо аксиоса и все прошло нормально.С Axios мой сервер получал метод OPTIONS, и я не знаю почему, я давал эту проблему с CORS.