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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
javascript 强制刷新页面的实现代码
Dec 13 Javascript
jquery实现心算练习代码
Dec 06 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
node.js基于mongodb的搜索分页示例
Jan 22 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 Javascript
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
小程序实现按下录音松开识别语音
Nov 22 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 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实现将GB编码转换为UTF8
2006/11/25 PHP
PHP mkdir()定义和用法
2009/01/14 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
JS实现前端缓存的方法
2017/09/21 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python内存读写操作示例
2018/07/18 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
青年文明号服务承诺
2014/03/31 职场文书
食品采购员岗位职责
2014/04/14 职场文书
暑期教师培训方案
2014/06/07 职场文书
教师职位说明书
2014/07/29 职场文书
北京颐和园导游词
2015/01/30 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript