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 相关文章推荐
使用pandas read_table读取csv文件的方法
Jul 04 Python
python使用knn实现特征向量分类
Dec 26 Python
学习python可以干什么
Feb 26 Python
python lxml中etree的简单应用
May 10 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
什么是Python中的匿名函数
Jun 02 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
Python基于Faker假数据构造库
Nov 30 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 生成加密公钥加密私钥实例详解
2017/06/16 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python中的lstrip()方法使用简介
2015/05/19 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
python中返回矩阵的行列方法
2018/04/04 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
电气自动化求职信
2014/06/24 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
七一建党节演讲稿
2014/09/11 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
redis protocol通信协议及使用详解
2022/07/15 Redis