详解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 相关文章推荐
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Django开发中复选框用法示例
Mar 20 Python
python基础教程项目二之画幅好画
Apr 02 Python
Python中类的创建和实例化操作示例
Feb 27 Python
详解Python学习之安装pandas
Apr 16 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
python向字符串中添加元素的实例方法
Jun 28 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
Python内存映射文件读写方式
Apr 24 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 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
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python中get和post有什么区别
2020/06/19 Python
python线性插值解析
2020/07/05 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
PHP面试题及答案一
2012/06/18 面试题
好听的队名和口号
2014/06/09 职场文书
夏季药店促销方案
2014/08/22 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
三好学生个人总结
2015/02/15 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
开网店计划分析
2019/07/30 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Golang 入门 之url 包
2022/05/04 Golang