详解Django解决ajax跨域访问问题


Posted in Python onAugust 24, 2018

这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里设置响应头,只能控制单个接口,需要的朋友可以参考下。
使用Django在服务器端写了一个API,返回一个JSON数据。使用Ajax调用该API:

但是,Chrome浏览器提示错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是由于CORS导致的。

什么是CORS?

CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问。
其实,在服务器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的简单,apache/nginx等怎么配置,见参考文档。
举个例子:

  1. API部署在DomainA上;
  2. Ajax文件部署在DomainB上,Ajax文件会向API发送请求,返回数据;
  3. 用户通过DomainC访问DomainB的Ajax文件,请求数据

详解Django解决ajax跨域访问问题

前端打开的是'http://localhost:63343‘地址, 另一个是django服务器,打开了‘http://localhost:8000‘地址, 所以在'http://localhost:63343‘的javascript对'http://localhost:8000‘进行访问时,端口不同,属于跨域访问.

当我将前端页面放入django中后,就不会出现跨域访问的拒绝了.

几种方法:

1.使用JSONP使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
JSONP只能用于GET请求。

2.直接修改Django中的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

3.安装django-cors-headers这里还有一各发现!在Django中,有人开发了CORS-header的middleware,只在settings.py中做一些简单的配置即可,开启CORS,没有跨域烦恼,真爽!~

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', 
)

大功告成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在类Unix系统上开始Python3编程入门
Aug 20 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
python日志logging模块使用方法分析
May 23 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python各类经纬度转换的实例代码
Aug 08 Python
python编写猜数字小游戏
Oct 06 Python
python反转列表的三种方式解析
Nov 08 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
Python的scikit-image模块实例讲解
Dec 30 Python
如何用python实现一个HTTP连接池
Jan 14 Python
7个关于Python的经典基础案例
Nov 07 Python
Python制作春联的示例代码
Jan 22 Python
Python面向对象之反射/自省机制实例分析
Aug 24 #Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 #Python
Python日志模块logging基本用法分析
Aug 23 #Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
You might like
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
python中pop()函数的语法与实例
2020/12/01 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
函授本科自我鉴定
2014/02/04 职场文书
C++程序员求职信
2014/05/07 职场文书
生日赠语
2015/06/23 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript