Django+Vue跨域环境配置详解


Posted in Javascript onJuly 06, 2018

概述

在使用Django+Vue开发过程中,遇到了很多开发环境相关的问题,比如跨域,比如ajax请求参数等,本篇文章主要记录解决在开发过程中,遇到的一些问题。

跨域不带Cookie

在使用Vue脚手架开发的过程中,会使用Vue脚手架自带的Server进行项目调试,Vue自带的Server支持 hot reloading ,这个特性是非常好用的。但是在开发过程中,因为要与后端交互,所以在请求后端接口的时候,会遇到跨域问题,这个问题在一些职责划分清楚的团队并不存在,因为前端开发人员会才用Mock数据的方式。

Webpack配置

采用Webpack dev server的 proxyTable 即可实现代理,将请求转发到后端的开发服务器上。配置方法如下:

proxyTable: {
 '/api': {
  target: 'http://127.0.0.1:8190/',
  changeOrigin: true
 },
 '/manager': {
  target: 'http://127.0.0.1:8000/',
  changeOrigin: true,
 }
}

将需要请求的真实地址在proxyTable里配置即可。

当然,proxyTable还有需要更高级的用法,这里就先不去踩那些不必要的坑。

Django CORS头配置

Django配置跨域,可以自己实现,也可以使用一个比较好用的库 django-cors-headers

在Django的配置文件里添加如下配置:

(1) 在 INSTALLED_APPS 配置项里配置如下:

INSTALLED_APPS = (
  ...
  'corsheaders',
  ...
)

(2) 在 MIDDLEWARE_CLASSES 配置项里配置如下:

MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
  ...
  'corsheaders.middleware.CorsMiddleware',
  'django.middleware.common.CommonMiddleware',
  ...
]

CorsMiddleware 的优先级要尽可能的高,如在 CorsMiddleware 前边。

(3)增加 CORS_ORIGIN_ALLOW_ALL 配置项

在配置文件里新增 CORS_ORIGIN_ALLOW_ALL 配置项,并设置为True

CORS_ORIGIN_ALLOW_ALL = True

跨域带Cookie

按照上面的配置对 webpack Django 进行配置后,可以实现在Vue中进行跨域Ajax请求,但是请求中并不带Cookie,如果需要带Cookie,则需要进行如下配置。

Webpack配置

Webpack配置方法同不带Cookie的方法相同。

Vue配置

在Vue里需要对 axios 进行全局配置,在 main.js 里增加如下配置:

axios.defaults.withCredentials = true

Django配置

如果需要在请求中带上Cookie,Django中的跨域返回头中就不能允许所有主机,需要指定单独主机,配置如下:

CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_WHITELIST = (
  'localhost:8088',
  'localhost:8000',
  '127.0.0.1:8088',
  '127.0.0.1:8000'
)

CORS_ALLOW_HEADERS = (
  'x-csrftoken',
)

其中 CORS_ALLOW_HEADERS 配置项允许在ajax请求中定义允许自定义的头字段。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript Jquery 遍历Json的实现代码
Mar 31 Javascript
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
全面解析Bootstrap图片轮播效果
Dec 03 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
RequireJS简易绘图程序开发
Oct 28 Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
JavaScript如何借用构造函数继承
Nov 06 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 #Javascript
微信小程序实时聊天WebSocket
Jul 05 #Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 #Javascript
基于vue展开收起动画的示例代码
Jul 05 #Javascript
微信小程序实现星级评分和展示
Jul 05 #Javascript
vue-router history模式下的微信分享小结
Jul 05 #Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 #Javascript
You might like
php模拟post上传图片实现代码
2016/06/24 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python中bisect模块用法实例
2014/09/25 Python
Python开发的HTTP库requests详解
2017/08/29 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
房地产员工找工作的自我评价
2013/11/15 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
英文产品推荐信
2015/03/27 职场文书
法定授权委托证明书
2015/06/18 职场文书
五年级作文之想象作文
2019/10/30 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
基于PyQt5制作一个群发邮件工具
2022/04/08 Python