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使用cPickle模块序列化实例
Sep 25 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
浅析Python中signal包的使用
Nov 13 Python
python装饰器与递归算法详解
Feb 18 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python使用pickle模块存储数据报错解决示例代码
Jan 26 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
python实现简单飞行棋
Feb 06 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
通用的Django注册功能模块实现方法
Feb 05 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 empty函数报错解决办法
2014/03/06 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
Python开发的HTTP库requests详解
2017/08/29 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python中open函数的基本用法示例
2019/09/07 Python
Python字符串及文本模式方法详解
2020/09/10 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
证婚人搞笑证婚词
2014/01/10 职场文书
优秀员工演讲稿
2014/05/19 职场文书
党员评议自我评价
2015/03/03 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS