【发布时间】:2021-07-23 10:17:54
【问题描述】:
我正在尝试从不同子域上的 React Native Web 前端对 Django 进行 POST 调用。
我以为我已经正确配置了 CORS,但事实并非如此。
这是我的 Django settings.py 的样子:
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = ['*']
CORS_ALLOWED_ORIGINS = ['https://api.example.com', 'https://example.com', 'https://www.example.com' ]
CSRF_TRUSTED_ORIGINS = [
'https://api.example.com', 'https://example.com', 'https://www.example.com'
]
ALLOWED_HOSTS = ["0.0.0.0", "api.example.com", "example.com"]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
]
INSTALLED_APPS = [
...
'corsheaders',
...
]
我到底做错了什么?我得到的错误是这样的:
Access to XMLHttpRequest at 'https://api.example.com/api/v1/pagescreate/' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这是我的 Django 视图:
class PageCreateView(generics.CreateAPIView):
queryset = Page.objects.all()
serializer_class = PageSerializer
这可能是什么原因造成的?我错过了 React 中的一些设置吗?我正在使用 axios 进行调用,唯一的标题是 "Content-Type": "application/json"
编辑:这可能是由于我的服务器上的一些 nginx 规则造成的吗?或者我的 Kubernetes 配置?我正在使用 Docker 来设置容器,并且可以轻松链接 Dockerfile 或我的 Kubernetes 设置中的任何信息
【问题讨论】:
-
这个问题你解决了吗?
-
@MahmoudAdel 我没有,没有
-
我认为如果有人有更好的答案可能会更好,我之前遇到过这个问题,但通过正确设置我的 conf 解决了它,我不知道为什么你的不工作,但所有我能做的就是分享我的 Django conf,对于
react,它可能是缺少标头问题 -
@MahmoudAdel 是的,我也怀疑缺少标题。我可以在两个小时内悬赏,所以我可能最终会这样做
-
也许这个答案有帮助? stackoverflow.com/a/50949631/4984493
标签: python django http cors django-cors-headers