简单了解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中的readline()方法的使用
May 24 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
python flask几分钟实现web服务的例子
Jul 26 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
Opencv求取连通区域重心实例
Jun 04 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 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中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
php实现映射操作实例详解
2019/10/02 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
js数组中去除重复值的几种方法
2020/08/03 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
python numpy格式化打印的实例
2018/05/14 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
2014年医德医风工作总结
2014/11/13 职场文书
先进个人申报材料
2014/12/30 职场文书
给客户的感谢信
2015/01/21 职场文书
辞职信的写法
2015/02/27 职场文书
2015党建工作简报
2015/07/21 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA