简单了解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编程中运用闭包时所需要注意的一些地方
May 02 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
python主线程捕获子线程的方法
Jun 17 Python
基于python实现学生管理系统
Oct 17 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
Python编程编写完善的命令行工具
Sep 15 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
Python 实现try重新执行
2019/12/21 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
python的Jenkins接口调用方式
2020/05/12 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
实习生求职自荐信
2014/02/07 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
电工工作职责范本
2014/02/22 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
信访工作汇报材料
2014/10/27 职场文书
商场收银员岗位职责
2015/04/07 职场文书
python实现层次聚类的方法
2021/11/01 Python
canvas 中如何实现物体的框选
2022/08/05 Javascript