简单了解django处理跨域请求最佳解决方案


Posted in Python onMarch 25, 2020

一、什么是跨域请求

跨域:

简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。这显然是不安全的。为此,浏览器的鼻祖:网景(Netscape)公司提出了优秀的解决方案:著名的浏览器同源策略。现在所有支持JavaScript的浏览器都会使用这个策略。

同源:域名、协议、端口均相同的网站即为同源。

流程:

当一个浏览器的两个Tab页分别打开百度和谷歌页面时,百度发起一个脚本执行,此时浏览器会检查该脚本属于哪个页面。即检查是否同源。只有和百度同源的脚本才会被执行。若非同源,在请求数据时,浏览器会在控制台报一个异常。提示拒绝访问。

ps: 以上关于同源策略解释参考自百度百科-同源策略。

二、关于解决跨域请求

解决跨域请求从前端到后端有N种解决方式。我不在此一一列举。只分享一个目前看来对django处理跨域请求的最佳方案。

1.安装django-cors-headers

pip install django-cors-headers

2.配置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',
)

通过以上配置,即可完美解决django跨域请求处理。唯一需要注意的就是cors-headers的中间件CorsMiddleware在注册时必须放在django-common中间件的前一个。

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

Python 相关文章推荐
Python中for循环和while循环的基本使用方法
Aug 21 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python实现登录接口的示例代码
Jul 21 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
python3人脸识别的两种方法
Apr 25 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
Python 实现自动导入缺失的库
Oct 29 Python
Python面向对象原理与基础语法详解
Jan 02 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
python3利用Axes3D库画3D模型图
Mar 25 #Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 #Python
Django用数据库表反向生成models类知识点详解
Mar 25 #Python
Python动态强类型解释型语言原理解析
Mar 25 #Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 #Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 #Python
python实现梯度下降和逻辑回归
Mar 24 #Python
You might like
星际争霸兵种名称对照表
2020/03/04 星际争霸
php抽象类用法实例分析
2015/07/07 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
Python2.x中文乱码问题解决方法
2015/06/02 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
什么是测试驱动开发(TDD)
2012/02/15 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
儿科护士实习自我鉴定
2013/10/17 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
抽奖活动主持词
2014/03/31 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers