django-cors-headers实现跨域的方法总结

django-cors-headers实现跨域的方法总结

在setting.py中配置

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'django_cas_ng',

'DjangoUeditor',

'corsheaders',

]

MIDDLEWARE_CLASSES = [

'corsheaders.middleware.CorsMiddleware', #这个放到第一位

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

"corsheaders.middleware.CorsPostCsrfMiddleware",

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

'django_cas_ng.middleware.CASMiddleware',

]

settings.py中添加:

CORS_ALLOWED_ORIGINS = [

"http://xxxxxxx" , #发起请求的URL要求添加端口和http

]

注意:

MIDDLEWARE_CLASSES = []

和

MIDDLEWARE= []

Django中的settings.py设置是MIDDL

EWARE,而这需要添加在MIDDLEWARE_CLASSES ,否则django-cors-headers的配置就不生效!所以始终都无法实现跨域,后来查资料才发现,修改为:

MIDDLEWARE_CLASSES = [

'corsheaders.middleware.CorsMiddleware', #这个放到第一位

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

"corsheaders.middleware.CorsPostCsrfMiddleware",

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

'django_cas_ng.middleware.CASMiddleware',

]

MIDDLEWARE= [

'corsheaders.middleware.CorsMiddleware', #这个放到第一位

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

"corsheaders.middleware.CorsPostCsrfMiddleware",

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

'django_cas_ng.middleware.CASMiddleware',

]

实现跨域成功:

注意:MIDDLEWARE也必须要添加,否则报错:'WSGIRequest' object has no attribute 'session',session无法获取!这是第二天登录后台才发现这个问题,记录之!

settings.py配置文件总结:

一共设置4处:

INSTALLED_APPS、MIDDLEWARE_CLASSES(注意配置项尽可能放在最前)、CORS_ALLOWED_ORIGINS、CSRF_TRUSTED_ORIGINS分别添加白名单,注意URL的格式。

启用此功能corsheaders.middleware.CorsPostCsrfMiddleware后django.middleware.csrf.CsrfViewMiddleware,还应该在之后 添加,MIDDLEWARE_CLASSES以撤消Referer替换.

如果出现下面问题

ModuleNotFoundError: No module named 'corsheaders'

运行Django项目的时候出现了这个问题,这个问题是Django跨域问题,安装django-cors-headers就可以解决这个跨域的问题。

pip install django-cors-headers

但是如果仍然有问题,那就是你的那个python Django的环境有问题了。

这个时候你需要去仔细地检查自己的python环境

或者下面的原因

应用是否在开发环境中进行注册?

INSTALLED_APPS = (
    ...
    'corsheaders',  # 注意:如果应用不是在最后一行,注册完一定不要忘记加上逗号噢,不然是会报错的
    ...
	)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DjangoDjango REST Framework (DRF)是一对非常强大的web开发工具。当我们使用DRF开发API的时候,通常会遇到跨域问题。 跨域问题是由于浏览器的同源策略所引起的。同源策略限制了在不同来源(域、协议或端口)之间的网络通信。例如,当我们的前端代码(JavaScript)运行在一个域名为example.com的网站上,但是API的服务器运行在另一个不同的域名api.example.com上。这时候浏览器会阻止前端代码向不同域名的服务器发送请求,从而导致跨域问题。 解决跨域问题有多种方法。以下是一种使用DRF-CORS-HEADERS库解决跨域方法: 1. 安装DRF-CORS-HEADERS库:在你的Django项目中安装DRF-CORS-HEADERS库,可以通过pip install django-cors-headers命令安装。 2. 配置django-cors-headers:在Django项目的settings.py文件中进行配置,将'django-cors-headers'添加到INSTALLED_APPS列表中,并将CORS_ORIGIN_ALLOW_ALL设置为True。 3. 运行跨域的服务器:在你的Django项目中运行服务器,确保API可以被访问。 4. 测试跨域:使用浏览器访问你的前端代码,尝试与API进行通信。此时,你应该可以成功发送跨域请求。 使用DRF-CORS-HEADERS库可以轻松解决跨域问题,并且允许你更细粒度地控制跨域请求。当然,除了DRF-CORS-HEADERS,还有其他方法可以用来解决跨域问题,例如使用代理服务器或在API服务器上进行配置。选择合适的方法取决于你的具体需求和项目情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Deng872347348

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值