无法弄清楚我的 Django DRF api 端点出了什么问题。我收到 CORS 错误
跨源请求被阻止:同源策略不允许读取 远程资源位于http://127.0.0.1:8000/api/。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。状态代码:200。
问题是,我按照网上的每一步来解决这个问题。
似乎没有什么可以解决这个问题。我是不是忘记了什么?感谢您的帮助。
这是我的设置.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 发送,则不行,这是我的反应请求,以防万一:
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",
},
}
);
};
谢谢!
代码看起来不错,似乎是中间件顺序问题。您会尝试将 corsheader 放在 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',
]
因为中间件的顺序很重要。
请问您是如何解决这个问题的?