简单了解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常见数据结构详解
Jul 24 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
python中HTMLParser模块知识点总结
Jan 25 Python
python实现双向链表原理
May 25 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读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
php获取远程文件内容的函数
2015/11/02 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
Python实现修改文件内容的方法分析
2018/03/25 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
2015年幼儿园毕业感言
2014/02/12 职场文书
商场主管竞聘书
2014/03/31 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python
Nginx限流和黑名单配置
2022/05/20 Servers