简单了解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连接sql server乱码的解决方法
Jan 28 Python
python自动化测试之setUp与tearDown实例
Sep 28 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python 实现线程之间的通信示例
Feb 14 Python
信号生成及DFT的python实现方式
Feb 25 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 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
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript 获取网页参数系统
2008/07/19 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
领导视察欢迎词
2014/01/15 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python