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 相关文章推荐
Node.js中调用mysql存储过程示例
Dec 20 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
js实现点击获取验证码倒计时效果
Jan 28 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
三步实现ionic3点击退出app程序
Sep 17 Javascript
vue实现简单学生信息管理
May 30 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
如何将JavaScript将数组转为树形结构
Jun 02 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框架的理由
2015/09/26 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
python笔记(2)
2012/10/24 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python实现的Iou与Giou代码
2020/01/18 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
金融专业个人求职信
2013/09/22 职场文书
机电专业个人自荐信格式模板
2013/09/23 职场文书
客服实习的个人自我鉴定
2013/10/20 职场文书
促销活动总结范文
2014/04/30 职场文书
党员干部一句话承诺
2014/05/30 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
中学生自我评价范文
2015/03/03 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
python处理json数据文件
2022/04/11 Python