无法弄清楚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',
]
因为中间件的顺序很重要。