Django,CORS "Access-Control-Allow-Origin"错误



无法弄清楚Django DRF api端点出了什么问题。我收到一个CORS错误

阻止跨来源请求:同源策略不允许读取位于的远程资源http://127.0.0.1:8000/api/.(原因:CORS缺少标头"Access Control Allow Origin"(。状态代码:200。

问题是,我在网上遵循了每一步来解决这个问题。

  • 我安装了"django-cors-headers">
  • rest_framework之上的INSTALLED_APPS和包含api端点的应用程序中添加了corshears应用程序
  • 在中,将cors中间件添加到中间件列表的顶部设置.py
  • 添加了"CORS_ALLOWED_ORIGNS=("http://localhost:3000'#反应app((也尝试使用CORS_ORIGIN_ALLOW=True(
  • 四重选中API POST请求包含尾部斜线

似乎没有什么能解决它。我是不是忘了什么?谢谢你的帮助。

这是我的设置.py:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'rest_framework',
'core.apps.CoreConfig',
]
CORS_ALLOWED_ORIGINS = (
'http://localhost:3000',  # for localhost (REACT Default)
)

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'corsheaders.middleware.CorsMiddleware',
'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',
'django.middleware.common.CommonMiddleware',
]

不确定它有多有趣,但如果我从失眠中发送POST请求,它会很好,但从React中,它不会,这是我的React请求以防万一:

const postSomeData = async () => {
const res = await axios.post(
"http://127.0.0.1:8000/api/",
{ promptQuery: "pls just work already" },
{
headers: {
"Content-Type": "application/json",
},
}
);
};

谢谢!

代码看起来不错,似乎是中间件订单问题。你能试着把corshead放在sessionmiddleware和commonmiddleware之间吗。。像这样的东西:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', #here
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

因为中间件的顺序很重要。

相关内容

最新更新