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实现的简单文件传输服务器和客户端
Apr 08 Python
简介Django中内置的一些中间件
Jul 24 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python装饰器知识点补充
May 28 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
浅谈Python数学建模之整数规划
Jun 23 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处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
jQuery手风琴的简单制作
2017/05/12 jQuery
分析javascript原型及原型链
2018/03/18 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python3中的json模块使用详解
2018/05/05 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
python实现名片管理系统项目
2019/04/26 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
南威尔士家居商店:Leekes
2016/10/25 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
校友会欢迎辞
2014/01/13 职场文书
怎么写自荐书范文
2014/02/12 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
运动会标语
2014/06/21 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
保护动物的宣传语
2015/07/13 职场文书
2016年元旦致辞
2015/08/01 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
图解上海144收音机
2021/04/22 无线电