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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
Dec 27 Javascript
jquery实现简易的移动端验证表单
Nov 08 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
AngularJs定制样式插入到ueditor中的问题小结
Aug 01 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
Oct 12 Javascript
js实现拖拽功能
Mar 01 Javascript
用最少的JS代码写出贪吃蛇游戏
Jan 12 Javascript
vue分页插件的使用方法
Dec 25 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 Javascript
解决Element中el-date-picker组件不回填的情况
Nov 07 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
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php中执行系统命令的方法
2015/03/21 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
python 实现归并排序算法
2012/06/05 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Django中URL的参数传递的实现
2019/08/04 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
质量月活动策划方案
2014/03/10 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
中学生操行评语
2014/04/24 职场文书
甜品店创业计划书
2014/09/21 职场文书
见习期个人总结
2015/03/05 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书