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中的typeof和instanceof介绍
Dec 04 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
Node做中转服务器转发接口
Oct 18 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
深入剖析Node.js cluster模块
May 23 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
React-redux实现小案例(todolist)的过程
Sep 29 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 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 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python BeautifulSoup使用方法详解
2013/11/21 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
酒店办公室文员岗位职责
2013/12/18 职场文书
酒店管理求职信范文
2014/04/06 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
长城英文导游词
2015/01/30 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
初中政治教学工作总结
2015/08/13 职场文书
python实现简单反弹球游戏
2021/04/12 Python
浅谈如何保证Mysql主从一致
2022/03/13 MySQL
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技