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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
js获取电脑分辨率的思路及操作
Nov 22 Javascript
浅谈javascript的调试
Jan 28 Javascript
javascript继承的六大模式小结
Apr 13 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
jQuery使用unlock.js插件实现滑动解锁
Apr 04 jQuery
微信小程序之圆形进度条实现思路
Feb 22 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
python复制文件代码实现
2013/12/23 Python
python实现的udp协议Server和Client代码实例
2014/06/04 Python
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python 文件处理注意事项总结
2017/04/10 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python之文件读取一行一行的方法
2018/07/12 Python
Flask之flask-session的具体使用
2018/07/26 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
详解python中*号的用法
2019/10/21 Python
Python类的继承super相关原理解析
2020/10/22 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
在校生党员自我评价
2013/09/25 职场文书
汽车专业求职信
2014/06/05 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
光荣之路观后感
2015/06/12 职场文书
花田少年史观后感
2015/06/16 职场文书