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. ISITDTU CTF 2020 部分Web题目Writeup

    周末,跟着m3w师傅打ISITDTUCTF,m3w师傅带弟弟上分,Tql! Web1 给了源码: <?php class Read{ public $flag; public function ...

  2. ubuntu16.04搭建LAMP(独立安装)

    修改APT源 备份原文件source.list sudo cp /etc/source.list /etc/source.list.bak 修改source.list sudo vi /etc/sou ...

  3. wireshark分析nmap和metasploit内置的syn扫描

    syn扫描 syn扫描,根据三次握手,向端口发送syn包,如果对方回应SYN/ACK,则证明端口开放 首先是nmap 速度很快,0.67秒完成,看下wireshark的抓取 一次发送了大量的syn包 ...

  4. 还不懂spring中的bean的话,你一定得好好看看这篇文章

    bean的作用域 bean的生命周期 bean的装配 代码 实体类 package com; import java.util.List; public class User { private St ...

  5. 免费在线使用Ayoa:让思维导图更简单

    在学习和工作中,我们都会遇到需要使用思维导图的情况,导图可以很好地帮助我们处理工作,完成记录和分享,是一个非常便捷的工具.今天小编就想和大家分享一款非常简单好用的思维导图软件,Ayoa. 之所以要将它 ...

  6. keras中seq2seq实现

    这里只是简单的一个例子 输入序列 目标序列 [13, 28, 18, 7, 9, 5] [18, 28, 13] [29, 44, 38, 15, 26, 22] [38, 44, 29] [27, ...

  7. zabbix 监控ssh 登入与报警!!!!

    配置自定义键值 vim /etc/zabbix/zabbix_agentd.d/sanguo_check_ssh.conf 添加自定义键值 UserParameter=sanguo.check.ssh ...

  8. springboot打jar包将引用的第三方包、配置文件(.properties、.xml)、静态资源打在包外

    1.外置配置文件 Springboot读取核心配置文件(.properties)的外部配置文件调用方式为 jar包当前目录下的/config目录 因此要外置配置文件就在jar所在目录新建config文 ...

  9. IPSec传输模式/隧道模式下ESP报文的装包与拆包过程

    IPSec协议:IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. 传输模式和隧道模式:IPsec对数据进行加密的方式有两种:传输模 ...

  10. 现代富文本编辑器Quill的内容渲染机制

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...