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 文件重命名工具代码
Jul 26 Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python类的多重继承问题深入分析
Nov 09 Python
python将unicode转为str的方法
Jun 21 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
python实现推箱子游戏
Mar 25 Python
Python中print函数简单使用总结
Aug 05 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
90行Python代码开发个人云盘应用
Apr 20 Python
一行Python命令实现批量加水印
Apr 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
提升PHP执行速度全攻略(上)
2006/10/09 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php写app用的框架整理
2019/09/29 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
Python实现Event回调机制的方法
2019/02/13 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
python制作抽奖程序代码详解
2021/01/15 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
护理专业的自荐信
2013/10/22 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
求职意向书
2014/07/29 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
违章停车检讨书
2014/10/21 职场文书
2014年采购工作总结
2014/11/20 职场文书
处级干部考察材料
2014/12/24 职场文书
前台岗位职责
2015/02/13 职场文书
护士个人年终总结
2015/02/13 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
HTML中的表格元素介绍
2022/02/28 HTML / CSS
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android