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实现冒泡,插入,选择排序简单实例
Aug 18 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
Python线程同步的实现代码
Oct 03 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
Python为何不支持switch语句原理详解
Oct 21 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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 curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Javascript 布尔型分析
2008/12/22 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
在python中pandas的series合并方法
2018/11/12 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Python定时器线程池原理详解
2020/02/26 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
建筑行业的大学生自我评价
2013/12/08 职场文书
员工评语大全
2014/01/19 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
个人授权委托书范本
2014/04/03 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
解决Redis启动警告问题
2022/02/24 Redis