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中的生成器和yield详细介绍
Jan 09 Python
讲解Python中的标识运算符
May 14 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
Python和C/C++交互的几种方法总结
May 11 Python
pytorch构建网络模型的4种方法
Apr 13 Python
基于python实现简单日历
Jul 28 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
python中常用的数据结构介绍
Jan 12 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
python - asyncio异步编程
Apr 06 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写入数据库类代码分享
2011/07/26 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php按单词截取字符串的方法
2015/04/07 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python下10个简单实例代码
2017/11/15 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python计算导数并绘图的实例
2020/02/29 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
经济系大学生求职信
2013/10/01 职场文书
合作意向协议书范本
2014/03/31 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
《迟到》教学反思
2016/02/24 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js