Django backend не принимает запросы get от моего front end
Я использую React в качестве front end и Django в качестве backend когда я перехожу на бэкенд URL: localhost:8000, он отображает все данные в JSON, и если я использую Insomnia/Postman для получения и отправки запросов, это работает
Однако фронтенд не работает, я получаю
Access to XMLHttpRequest at 'http://127.0.0.1:8000/cluster/' from origin 'http://localhost:3000' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я читал другие статьи на этом сайте, и все они говорили, что нужно добавить @csrf_exempt, а у меня это уже есть, и я все еще получаю проблемы.
settings.py
CORS_ORIGIN_ALLOW = True
CORS_ORIGIN_ALLOW_ALL = True
views.py
@csrf_exempt
def clusterAPI(request, title=''):
if request.method=='GET':
clusters = reactUICluster.objects.all()
clusterSerializer = reactUIClusterSerializer(clusters,many=True)
return JsonResponse(clusterSerializer.data, safe=False)
elif request.method=='POST':
clusterData = JSONParser().parse(request)
clusterSerializer = reactUIClusterSerializer(data = clusterData)
if clusterSerializer.is_valid():
clusterSerializer.save()
return JsonResponse("Added Successfully", safe=False)
return JsonResponse("Failed To Add", safe=False)
elif request.method=='DELETE':
cluster = reactUICluster.objects.get(title=title)
cluster.delete()
return JsonResponse("Deleted Object", safe=False)
вызовaxios внутри моего front end
const config = {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS"
}
};
const axiomCall = async () => {
console.log("FF");
const temp = await axios.get("http://127.0.0.1:8000/cluster/", config)
setRow(temp)
};
Также в этой статье говорится об использовании app.use(cors), однако, поскольку у меня нет метода app.use(), я не могу этого сделать
import './App.css';
import React, { Component } from "react";
//import axios from "axios";
import RefreshList from './comps/comp1';
function App() {
return (
<div>
<RefreshList></RefreshList>
</div>
);
}
export default App;
Следуя этим шагам, я получил следующие результаты:
Установите Django CORS
.pip install django-cors-headers
Добавьте его в INSTALLED_APPS (settings.py):
INSTALLED_APPS = [ ... 'corsheaders', ]
Добавьте его сверху на MIDDLEWARE (settings.py):
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', ... ]
Переменная CORS может быть такой (settings.py):
CORS_ORIGIN_ALLOW_ALL = True # or: CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_WHITELIST = ( 'http://localhost:3000', # or the reactjs address being used )
Очистите кэш веб-браузера (Empty Cache и Hard Reload - для chrome) и перезапустите приложение .