You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django API跨域问题及安装django-cors-headers后报错求助

问题原因与解决方案

一、Python能访问但JavaScript不行的原因

  • Python的requests库属于后端HTTP请求工具,不受浏览器同源策略限制,直接向服务器发送请求并接收响应,不需要额外的CORS头验证。
  • 浏览器会强制执行同源策略:当JavaScript从不同域名/端口/协议请求API时,浏览器会自动发送OPTIONS预检请求,检查服务器返回的Access-Control-Allow-Origin等CORS响应头。如果服务器未返回这些头,浏览器会阻止JavaScript获取响应(哪怕服务器返回了200状态码),这就是你看到的跨域错误。

二、安装django-cors-headers后报错的原因

你的Django Rest Framework(DRF)版本3.12.4发布于2021年,完全不兼容Django 5.1.2:
Django 5.x版本移除了django.http.multipartparser.parse_header方法,但旧版DRF的renderers.py文件仍在尝试导入该方法,直接导致了导入错误和模板库加载失败。

三、解决步骤

1. 升级DRF到兼容Django 5.1.2的版本

运行以下命令升级DRF(3.16.x是支持Django 5.1的最低DRF版本):

pip install --upgrade djangorestframework>=3.16.0

2. 正确配置django-cors-headers

先确保安装兼容的django-cors-headers版本:

pip install --upgrade django-cors-headers

然后修改项目的settings.py:

  • 将corsheaders加入INSTALLED_APPS:
INSTALLED_APPS = [
    # ... 其他已存在的应用
    'corsheaders',
]
  • 将CORS中间件加入MIDDLEWARE(注意要放在CommonMiddleware之前):
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ... 其他已存在的中间件
]
  • 配置允许跨域的源(根据环境选择):
# 开发环境可临时允许所有源(生产环境不建议)
CORS_ALLOW_ALL_ORIGINS = True

# 生产环境建议指定具体允许的域名
# CORS_ALLOWED_ORIGINS = [
#     "https://your-svelte-domain.com",
#     "http://localhost:5173",  # 本地Svelte开发端口
# ]

3. 重启Django服务

完成配置后,重启Django开发服务器,再用Svelte的fetch请求测试即可正常获取数据。

内容的提问来源于stack exchange,提问作者vianneyba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:38:13