简单了解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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
Python标准库urllib2的一些使用细节总结
Mar 16 Python
python 网络编程详解及简单实例
Apr 25 Python
Python微信库:itchat的用法详解
Aug 14 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
用Python实现数据的透视表的方法
Nov 16 Python
在pycharm中设置显示行数的方法
Jan 16 Python
关于python多重赋值的小问题
Apr 17 Python
python对象转字典的两种实现方式示例
Nov 07 Python
Python numpy线性代数用法实例解析
Nov 15 Python
Python编解码问题及文本文件处理方法详解
Jun 20 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
分享3个php获取日历的函数
2015/09/25 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
深入理解vue-loader如何使用
2017/06/06 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
js实现上下左右键盘控制div移动
2020/01/16 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
举例介绍Python中的25个隐藏特性
2015/03/30 Python
python图像处理之反色实现方法
2015/05/30 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
研究生自我鉴定范文
2013/10/30 职场文书
支教自我鉴定
2014/01/18 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
小爸爸观后感
2015/06/15 职场文书
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技