简单了解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对Json的解析
Feb 14 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
python smtplib发送带附件邮件小程序
May 22 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
简单了解django orm中介模型
Jul 30 Python
简单了解python中的与或非运算
Sep 18 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
python路径的写法及目录的获取方式
Dec 26 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php防攻击代码升级版
2010/12/29 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
python 创建弹出式菜单的实现代码
2017/07/11 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
一套Java笔试题
2016/08/20 面试题
晨会主持词
2014/03/17 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
先进学校事迹材料
2014/12/30 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书