简单了解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爬虫中urllib库的进阶学习
Jan 05 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python逆序打印各位数字的方法
Jun 25 Python
python调用百度语音识别api
Aug 30 Python
pandas 将索引值相加的方法
Nov 15 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
Python first-order-model实现让照片动起来
Jun 25 Python
如何基于python实现单目三维重建详解
Jun 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
上海无线电三厂简史修改版
2021/03/01 无线电
用PHP实现文件上传二法
2006/10/09 PHP
桌面中心(一)创建数据库
2006/10/09 PHP
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
jquery ajax请求实例深入解析
2012/11/26 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
推荐11个实用Python库
2015/01/23 Python
EM算法的python实现的方法步骤
2018/01/02 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
Python之字典对象的几种创建方法
2020/09/30 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
请解释接口的显式实现有什么意义
2012/05/26 面试题
应聘教师自荐信
2013/10/12 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
英语分层教学实施方案
2014/06/15 职场文书
博士生求职信
2014/07/06 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
javascript函数式编程基础
2021/09/15 Javascript
Python读取和写入Excel数据
2022/04/20 Python