简单了解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 文件和路径操作函数小结
Nov 23 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
python 整数越界问题详解
Jun 27 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
Python实现图像的垂直投影示例
Jan 17 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
PyTorch安装与基本使用详解
Aug 31 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
python 装饰器重要在哪
Feb 14 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
BBS(php & mysql)完整版(八)
2006/10/09 PHP
php下删除字符串中HTML标签的函数
2008/08/27 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
详解用python实现简单的遗传算法
2018/01/02 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
法律专业自我鉴定
2013/10/03 职场文书
工商管理专业应届生求职信
2013/11/04 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
无犯罪记录证明
2014/09/19 职场文书
汽车机电维修工求职信
2014/09/30 职场文书