【发布时间】:2020-05-28 05:42:06
【问题描述】:
我已经尝试了 react 和 django api 之间所有可能的 CORS 组合。 还是不行。
我遇到了这个错误
has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'todos'
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = False
view.py
class StuffViewSet(APIView):
def post(self, request):
serializer = StuffSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(data = "data saved", status=status.HTTP_201_CREATED)
return Response(data = "data not saved", status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
snippets = Stuff.objects.all()
serializer = StuffSerializer(snippets, many=True)
return Response(data = json.dumps(serializer.data))
我是从这样的反应中调用 api
getAPI(e) {
const headers = {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,OPTIONS,POST,PUT"
}
axios.get('http://localhost:8000/api', {
headers: headers
}).then(function(response) {
console.log("/api")
console.log(response.data)
});
}
我在这里做错了什么?
【问题讨论】:
-
没有理由将 Access-Control-Allow-* 标头设置为请求标头——因为它们是响应标头,而不是请求标头。也许你应该试试这个pypi.org/project/Flask-Cors
-
在您的 fetch 或 axios 请求中添加 cors:"no-cors"。
-
@EddwinPaz 你有这个例子吗?
标签: python django reactjs cors django-cors-headers