详解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 入门教程 简单但比较不错
Nov 29 Python
python 从远程服务器下载东西的代码
Feb 10 Python
低版本中Python除法运算小技巧
Apr 05 Python
python遍历目录的方法小结
Apr 28 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
uwsgi+nginx部署Django项目操作示例
Dec 04 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
Python实现中值滤波去噪方式
Dec 18 Python
python3实现无权最短路径的方法
May 12 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
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
JS高级运动实例分析
2016/12/20 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
应届生求职推荐信
2013/10/28 职场文书
实习鉴定范文
2013/12/19 职场文书
公司酒会主持词
2015/07/02 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python