Djange解决跨域问题

Djange解决跨域问题

  • [安装 django-cors-headers](#安装 django-cors-headers)
  • [将 CORS 中间件添加到项目设置](#将 CORS 中间件添加到项目设置)
  • [配置 CORS 策略](#配置 CORS 策略)
  • [为特定的 API 视图开启 CORS](#为特定的 API 视图开启 CORS)

在 Django 中解决跨域资源共享(CORS)问题,通常涉及到后端接受来自不同域的前端请求。为了安全起见,浏览器限制了脚本内跨域 HTTP 请求,这就需要后端明确允许某些类型的跨域请求。在 Django 项目中,这通常通过使用中间件来配置 CORS 头信息实现。

一个常用的方式是使用 django-cors-headers 包来简化这一过程。以下是配置步骤:

安装 django-cors-headers

在Django 项目环境中安装 django-cors-headers。你可以使用 pip 安装:

bash 复制代码
pip install django-cors-headers

将 CORS 中间件添加到项目设置

在你的 Django 项目的 settings.py 文件中,添加 corsheaders 到 INSTALLED_APPS 部分,确保 CorsMiddleware 能够加载:

bash 复制代码
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

然后,确保 CorsMiddleware 被添加到 MIDDLEWARE 设置的顶部(至少在 CommonMiddleware 之前):

bash 复制代码
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

配置 CORS 策略

接下来,需要在 settings.py 文件中配置 CORS 策略。你可以开启对所有域的 CORS 请求(不推荐,仅作测试使用),或者指定允许的域。

  • 允许所有域名
bash 复制代码
CORS_ALLOW_ALL_ORIGINS = True
  • 允许指定域名
bash 复制代码
CORS_ALLOWED_ORIGINS = [
    "http://localhost:8080",
    "http://127.0.0.1:9000",
]

CORS_ALLOWED_ORIGINS 列表中,你可以添加允许 CORS 请求的前端应用域名。

为特定的 API 视图开启 CORS

如果只想为特定的 API 或 Django 视图开启 CORS,可以使用装饰器 @cors_allowed_origin。这需要在视图函数上添加相应的装饰器并指定允许的源。

python 复制代码
from corsheaders.decorators import cors_allowed_origin

@cors_allowed_origin(['http://localhost:3000'])
def my_view(request):
    ...

完成以上设置后,Django 后端应该就能够处理跨域请求了。这对于开发期间前后端分离的场景尤其有用,也是生产环境中实现前后端分离的必要步骤之一。请记得,开放跨域请求可能会带来安全风险,因此在生产环境中应谨慎配置允许的源。

相关推荐
get lend gua30 分钟前
游戏数据分析,力扣(游戏玩法分析 I~V)mysql+pandas
python·mysql·leetcode·游戏·数据分析
唐叔在学习1 小时前
【Python入门】文件读取全攻略:5种常用格式(csv/excel/word/ppt/pdf)一键搞定 | 附完整代码示例
python·数据分析·办公自动化·文件处理
心软且酷丶1 小时前
leetcode:2899. 上一个遍历的整数(python3解法)
python·算法·leetcode
Light601 小时前
Python依赖注入完全指南:高效解耦、技术深析与实践落地
python·设计模式·单元测试·fastapi·依赖注入·解耦
odoo中国1 小时前
Python 深度学习 第8章 计算机视觉中的深度学习 - 卷积神经网络使用实例
python·深度学习·计算机视觉·卷积神经网络
仙人掌_lz2 小时前
详解如何复现LLaMA 4:从零开始利用Python构建
人工智能·python·ai·llama·智能体·ai agents
一个天蝎座 白勺 程序猿2 小时前
Python(19)Python并发编程:深入解析多线程与多进程的差异及锁机制实战
开发语言·python
星辰大海的精灵2 小时前
微信客服小助手 python接入
后端·python
友恒写实3 小时前
Python面试官:你来解释一下协程的实现原理
后端·python
苏牧keio3 小时前
3 Python语法快速入门(基础篇)
python