详解Django解决ajax跨域访问问题


Posted in Python onAugust 24, 2018

这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里设置响应头,只能控制单个接口,需要的朋友可以参考下。
使用Django在服务器端写了一个API,返回一个JSON数据。使用Ajax调用该API:

但是,Chrome浏览器提示错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是由于CORS导致的。

什么是CORS?

CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问。
其实,在服务器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的简单,apache/nginx等怎么配置,见参考文档。
举个例子:

  1. API部署在DomainA上;
  2. Ajax文件部署在DomainB上,Ajax文件会向API发送请求,返回数据;
  3. 用户通过DomainC访问DomainB的Ajax文件,请求数据

详解Django解决ajax跨域访问问题

前端打开的是'http://localhost:63343‘地址, 另一个是django服务器,打开了‘http://localhost:8000‘地址, 所以在'http://localhost:63343‘的javascript对'http://localhost:8000‘进行访问时,端口不同,属于跨域访问.

当我将前端页面放入django中后,就不会出现跨域访问的拒绝了.

几种方法:

1.使用JSONP使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
JSONP只能用于GET请求。

2.直接修改Django中的views.py文件修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据:

def myview(_request): 
 response = HttpResponse(json.dumps({"key": "value", "key2": "value"}))
 response["Access-Control-Allow-Origin"] = "*" 
 response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS" 
 response["Access-Control-Max-Age"] = "1000" 
 response["Access-Control-Allow-Headers"] = "*" 
 return response

3.安装django-cors-headers这里还有一各发现!在Django中,有人开发了CORS-header的middleware,只在settings.py中做一些简单的配置即可,开启CORS,没有跨域烦恼,真爽!~

django-cors-headers

首先安装

pip install django-cors-headers

然后在settings.py里配置一番就可以

INSTALLED_APPS = [ 
  ... 
  'corsheaders', 
  ... ] 
 MIDDLEWARE_CLASSES = ( 
  ... 
  'corsheaders.middleware.CorsMiddleware', 
  'django.middleware.common.CommonMiddleware', # 注意顺序 
  ... 
 ) 
#跨域增加忽略 
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = ( '*') 
CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) 
CORS_ALLOW_HEADERS = ( 
'XMLHttpRequest', 
'X_FILENAME', 
'accept-encoding', 
'authorization', 
'content-type', 
'dnt',
'origin', 
'user-agent', 
'x-csrftoken', 
'x-requested-with', 
'Pragma', 
)

大功告成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
python实现txt文件格式转换为arff格式
May 31 Python
python numpy 显示图像阵列的实例
Jul 02 Python
Python定时任务sched模块用法示例
Jul 16 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
keras多显卡训练方式
Jun 10 Python
python是怎么被发明的
Jun 15 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
90行Python代码开发个人云盘应用
Apr 20 Python
Python面向对象之反射/自省机制实例分析
Aug 24 #Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 #Python
Python日志模块logging基本用法分析
Aug 23 #Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
如何开发一个虚拟域名系统
2006/10/09 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
PHP制作用户注册系统
2015/10/23 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
心扬JS分页函数代码
2010/09/10 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
js性能优化技巧
2015/11/29 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
webpack入门+react环境配置
2017/02/08 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python中的装饰器用法详解
2015/01/14 Python
Python计算回文数的方法
2015/03/11 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python实现GIF图倒放
2020/07/16 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
计划生育标语
2014/06/23 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
毕业证明书
2015/06/19 职场文书
追悼词范文大全
2015/06/23 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
z-index不起作用
2021/03/31 HTML / CSS
聊聊redis-dump工具安装问题
2022/01/18 Redis
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python