简单了解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 paramiko模块学习分享
Aug 23 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
python使用tkinter实现简单计算器
Jan 30 Python
python实现的发邮件功能示例
Sep 11 Python
python中class的定义及使用教程
Sep 18 Python
基于python3 的百度图片下载器的实现代码
Nov 05 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
python opencv通过4坐标剪裁图片
Jun 05 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 时间计算问题小结
2009/01/04 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
护士实习生自我鉴定范文
2013/12/10 职场文书
军神教学反思
2014/02/04 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技