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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
Pytorch入门之mnist分类实例
Apr 14 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
python实现名片管理系统项目
Apr 26 Python
Django发送邮件功能实例详解
Sep 02 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
python实现logistic分类算法代码
Feb 28 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
Django 实现jwt认证的示例
Apr 30 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
Ext 今日学习总结
2010/09/19 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
python批量下载图片的三种方法
2013/04/22 Python
python实现按行切分文本文件的方法
2016/04/18 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python数据挖掘需要学的内容
2019/06/23 Python
Django中信号signals的简单使用方法
2019/07/04 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
一些Solaris面试题
2015/12/22 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
物业工作计划书
2014/01/10 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
电气工程师岗位职责
2015/02/12 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js