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返回昨天日期的方法
May 13 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
Python数据类型详解(二)列表
May 08 Python
Python内置函数reversed()用法分析
Mar 20 Python
python使用tornado实现登录和登出
Jul 28 Python
Python微医挂号网医生数据抓取
Jan 24 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
python对验证码降噪的实现示例代码
Nov 12 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
python 实现表情识别
Nov 21 Python
python 实现逻辑回归
Dec 30 Python
教你利用Selenium+python自动化来解决pip使用异常
May 20 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获取301跳转URL简单实例
2013/12/16 PHP
将php数组输出html表格的方法
2014/02/24 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
List Installed Hot Fixes
2007/06/12 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python实现list反转实例汇总
2014/11/11 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
基于Python List的赋值方法
2018/06/23 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
python cookie反爬处理的实现
2020/11/01 Python
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
黄金搭档广告词
2014/03/21 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
决心书格式及范文
2019/06/24 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL