1. 始vue化项目

vue init webpack deaxios # 使用脚手架创建项目 deaxios(项目名,随便取得)
cd deaxios # 进入项目
cnpm install
npm install axios -S # 安装axios

2.封装axios

2.1 src文件夹下新建http文件夹, 用来放网络请求相关的文件

2.2 src/http 文件夹下, 创建 index.js 文件, 对axios进行封装

/* eslint-disable */ 
//第一步:实例化axios对象,并设置 1.请求地址;2.超时时间;3.设置请求头数据格式 
const axios = require('axios'); // 创建axios对象 
// import qs from 'qs' 
axios.defaults.baseURL = 'http://192.168.56.100:8888'; // vue请求后端地址 axios.defaults.timeout = 10000; // 多久超时
axios.defaults.withCredentials = true; // 跨域访问需要发送cookie 时一定要加axios.defaults.withCredentials = true;

/*** 设置请求传递数据的格式(看服务器要求的格式) 
* x-www-form-urlencoded
 * 默认提交表单
 * 把数据对象序列化成 表单数据 

*/
// axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'; // axios.defaults.transformRequest = data => qs.stringify(data);
 /**

* 设置默认提交 json
* 把数据对象序列化成 json 字符串 
*/
axios.defaults.headers['Content-Type'] = 'application/json'; // 设置默认提 交 json axios.defaults.transformRequest = data => JSON.stringify(data); // 把数据对象 序列化成 json 字符串

// 第二步:对请求拦截器,和响应拦截器进行封装 
/**
* 请求拦截器: 发送请求前需要调用这个函数 
1.当没有登录时,直接跳转到登录页 
2.请求发送前把token获取,设置到header中 
*/

axios.interceptors.request.use(config => {
     // 从localStorage中获取token
     let token = localStorage.getItem('token'); 
    // 如果有token, 就把token设置到请求头中Authorization字段中
     token && (config.headers.Authorization = token); 
    return config; 
}, error => {
     return Promise.reject(error); 
});

/**
 * 响应拦截器:当后端返回数据给vue时会调用这个函数
 1.没次返回403错误时,跳转到login 
 */ 
axios.interceptors.response.use(response => { 
    // 当响应码是 2xx 的情况, 进入这里 
    debugger 
    return response.data;
 }, error => {
     // 当响应码不是 2xx 的情况, 进入这里
     debugger 
     return error
 });

//第三步:使用上面的axios对象,对get请求和post请求进行封装
 /**
* get方法,对应get请求 
* @param {String} url [请求的url地址] 
* @param {Object} params [请求时携带的参数] 
*/
 export function get(url, params, headers) { 
    return new Promise((resolve, reject) => {
     axios.get(url, { params, headers }).then(res => {             
        resolve(res.data.ResultObj) 
     }).catch(err => {
         resolve (err.data) 
    }) 
  }) 
}

/**
 * post方法,对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
**/ 
export function post(url, params, headers) {
     
    return new Promise((resolve, reject) => {
         axios.post(url, params, headers).then((res) => { 
            resolve(res.data)
         }).catch((err) => {
            debugger 
            reject(err.data) 
        }) 
    })
}
export default axios; //一定要导出函数

2.3 src/http 目录下创建 apis.js文件, 用来写 接口地址列表  

  

/* eslint-disable */
// 接口信息, 生成请求方法
// 引入 get方法, post方法
import { get, post } from './index'
// 用户登录
export const login = (params, headers) => post("/user/login/", params, headers)

  

2.django cors设置:

INSTALLED_APPS = [
...
#添加 django-cors-headers 使其可以进行 cors 跨域
'corsheaders'
]

  

3. 添加中间件

MIDDLEWARE = [

放在中间件第一个
'corsheaders.middleware.CorsMiddleware', #第三行
...
]

  

4 跨域白名单

CORS_ORIGIN_WHITELIST = (

'http://127.0.0.1:8080',
'http://localhost:8080',
)
CORS_ALLOW_CREDENTIALS = True # 允许携带cookie

  

axios 封装 跨域 实现 (后端跨域配置白名单)的更多相关文章

  1. 切换路由时取消全部或者部分axios请求,并将一些从不需要取消的加入白名单

    1. axios拦截器进行配置,除了白名单中的接口,统统保存到全局变量canCancelAxios中 window.canCancelAxios = []; // http request 拦截器 a ...

  2. vue-cli3中axios如何跨域请求以及axios封装

    1. vue.config.js中配置如下 module.exports = { // 选项... // devtool: 'eval-source-map',//开发调试 devServer: { ...

  3. 使用nginx反向代理处理前后端跨域访问

    本文主要解决:使用nginx反向代理处理前后端跨域访问的问题 1.何为跨域访问? 以下类型为跨域访问 1)不同域名间访问 www.zuiyoujie.com和www.baidu.com 2)同域名不同 ...

  4. nginx解决跨域(前后端分离)

    Nginx解决跨域问题 后端接口 请求地址 返回数据(json数据) http://127.0.0.1:8080//app Hello World! 前端代码 通过nginx做静态资源服务器访问端口8 ...

  5. Api之Cors跨域以及其他跨域方式

    Web Api之Cors跨域以及其他跨域方式(三)   我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还 ...

  6. VUE006. 前端跨域代理服务器ProxyTable概述与配置

    概述 使用  vue-cli  工具生成一个  vue  项目: vue init webpack my-project-vue 在生成的项目结构里,会有一个  index.js  文件.在这个文件里 ...

  7. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  8. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  9. 跨域学习笔记1--跨域调用webapi

    在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已 ...

随机推荐

  1. Mysql数据安全备份

    数据安全备份的意义 在出现意外的时候(硬盘损坏.断点.黑客攻击),以便数据的恢复 导出生产的数据以便研发人员或者测试人员测试学习 高权限的人员那操作失误导致数据丢失,以便恢复 备份类型 完全备份:对整 ...

  2. 【剑指offer】面试题68(补充) 0到n-1中缺失的数字(二分法的进一步应用)

    题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内. 在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 输出 输入:[0,1,2, ...

  3. HDU100题简要题解(2010~2019)

    HDU2010 水仙花数 题目链接 Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个 ...

  4. [PHP安全特性学习]is_numeric()函数安全漏洞

    简介 PHP函数的安全特性-is_numerice() 函数 简介 PHP is_numeric() 函数 is_numeric() 函数用于检测变量是否为数字或数字字符串. 语法: bool is_ ...

  5. 新鲜出炉!面试90%会被问到的Java多线程面试题,史上最全系列!

    前言 最近很多粉丝朋友私聊我说能不能给整理出一份多线程面试题出来,说自己在最近的面试中老是被问到这一块的问题被问的很烦躁,前一段时间比较忙没时间回私信,前两天看到私信我也是赶紧花了两天给大家整理出这一 ...

  6. ccpc2020长春站F题 Strange Memory

    dsu on tree 题目链接 点我跳转 题目大意 给定一棵包含 \(n\) 个节点的树,每个节点有个权值 \(a_i\) 求\(∑_{i=1}^n∑_{j=i+1}^n[a_i⊕a_j=a_{lc ...

  7. CleanMyMac X是如何进行Mac文件清理的

    Mac系统进行文件清理,一般是直接将文件拖动入"废纸篓"回收站中,然后通过清理回收站,就完成了一次文件清理的操作,但是这么做并无法保证文件被彻底删除了,有些文件通过一些安全恢复手段 ...

  8. 微课制作软件Camtasia,来为视频添加预设动画效果

    之前已介绍过使用微课制作软件Camtasia为视频添加"缩放和平移"动画的教程以及"效果按钮"的使用. 此篇内容,我们就来介绍使用录像编辑软件--Camtasi ...

  9. 分析一个免杀webshell发现的php特性

    文章首发于t00ls,嫌文章太啰嗦的可以直接看结论 起源 之前看到别人分享的一个免杀webshell: <?php @$GLOBALS{next} = $GLOBALS[$GLOBALS[fun ...

  10. Spring5.0源码学习系列之Spring AOP简述

    前言介绍 附录:Spring源码学习专栏 在前面章节的学习中,我们对Spring框架的IOC实现源码有了一定的了解,接着本文继续学习Springframework一个核心的技术点AOP技术. 在学习S ...