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 贪吃蛇实现代码
Nov 22 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
vue实现弹幕功能
Oct 25 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
Python 自动化表单提交实例代码
2017/06/08 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
python 基于opencv操作摄像头
2020/12/24 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
人力资源经理自我评价
2014/01/04 职场文书
《金子》教学反思
2014/04/13 职场文书
大学迎新标语
2014/06/26 职场文书
企业公益活动策划方案
2014/08/24 职场文书
三峡大坝导游词
2015/01/31 职场文书
感谢师恩主题班会
2015/08/17 职场文书