Django跨域请求问题的解决方法示例


Posted in Python onJune 16, 2018

前言

本文主要给大家介绍了关于Django跨域请求问题解决的几种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

几种方法:

  • 使用django-cors-headers全局控制
  • 使用JsonP,只能用于Get方法
  • 在views.py里设置响应头,只能控制单个接口

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',
)

大功告成了。

JsonP

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

JSONP只能用于GET请求。

什么是JSONP

首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中。JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数据的传输。

那么JSONP是什么呢?

首先抛出浏览器同源策略这个概念,为了保证用户访问的安全,现代浏览器使用了同源策略,即不允许访问非同源的页面,详细的概念大家可以自行百度。这里大家只要知道,在ajax中,不允许请求非同源的URL就可以了,比如www.a.com下的一个页面,其中的ajax请求是不允许访问www.b.com/c.php这样一个页面的。

JSONP就是用来解决跨域请求问题的,那么具体是怎么实现的呢?

JSONP原理

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

JSONP具体实现

127.0.0.1:8000中的index.html

<!DOCTYPE html>
<html>
<head>
<title>GoJSONP</title>
</head>
<body>
$(".jsonp_test").click(function () {
$.ajax({
url:"http://127.0.0.1:8008/service/",
type:"get",
dataType:"jsonp", // 伪造ajax 基于script
jsonp: 'callbacks',
//jsonpCallback:"alex",
success:function (data) {
console.log(data)
}
})
})
<button class='jsop_test'>测试</button>
</body> </html>

127.0.0.1:8080的views

import json
def jsonp_test(request):
func=request.GET.get("callbacks") #获取请求的callbacks参数
info={"name":"fuyong","age":18} #定义数据
return HttpResponse(" ('%s')"%(func,json.dumps(info))) #传json对象

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python 创建空的list,以及append用法讲解
May 04 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
python实现月食效果实例代码
Jun 18 Python
python中的decimal类型转换实例详解
Jun 26 Python
python 实现生成均匀分布的点
Dec 05 Python
Python魔法方法 容器部方法详解
Jan 02 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
python 装饰器的使用示例
Oct 10 Python
Python for循环生成列表的实例
Jun 15 #Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 #Python
Python对象属性自动更新操作示例
Jun 15 #Python
numpy使用fromstring创建矩阵的实例
Jun 15 #Python
详解Python 协程的详细用法使用和例子
Jun 15 #Python
在NumPy中创建空数组/矩阵的方法
Jun 15 #Python
numpy中矩阵合并的实例
Jun 15 #Python
You might like
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
php实现登陆模块功能示例
2016/10/20 PHP
PDO::inTransaction讲解
2019/01/28 PHP
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
新手学python应该下哪个版本
2020/06/11 Python
解决c++调用python中文乱码问题
2020/07/29 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
一个SQL面试题
2014/08/21 面试题
院药学专业个人求职信
2013/09/21 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
中班中秋节活动反思
2014/02/18 职场文书
会走路的树教学反思
2014/02/20 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
运动会的口号
2014/06/09 职场文书
论文答谢词
2015/01/20 职场文书
财务总监岗位职责
2015/02/03 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书