前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue axios

Vue axios

作者头像
Autooooooo
发布2020-11-09 10:41:37
1.7K0
发布2020-11-09 10:41:37
举报
文章被收录于专栏:Coxhuang

Vue axios

#0 GitHub

https://github.com/Coxhuang/vue-axios-demo

#1 需求

  • 点击一个按钮,前端向后端发送http请求数据,后端返回数据给前端

#2 环境

#2.1 安装axios

代码语言:javascript
复制
npm install --save axios vue-axios

2.2 配置

代码语言:javascript
复制
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios,axios);
axios.defaults.baseURL = "http://127.0.0.1:8000/"; // 后端接口的地址 

#3 开始

#3.1 最简单的Demo

前端向后端发送一个get请求

  • HelloWorld.vue
代码语言:javascript
复制
<template>
	<div @click="btnClick()">点击</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	data () {
		return {}
	},
	methods:{
        btnClick:function(){
            this.axios.get('/api/user/list-user/').then((response)=>{
                console.log(response.data)
            }).catch((error)=>{
                console.log(error)
            })
        },
	},
}
</script>
  • 界面
在这里插入图片描述
在这里插入图片描述

  • 后端
在这里插入图片描述
在这里插入图片描述

本文使用的后端框架是Python的Django框架, 需要注意的是,后端接口需要配置跨域问题,如果不配置跨域,会出现以下情况:

20190914211619-image.png
20190914211619-image.png

后端返回的请求状态码仍然是200, 但是前段就是拿不到数据

Django解决跨域如下:

  • settings.py
代码语言:javascript
复制
...

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',  # 跨域,必须放在这个位置,不能放在'django.middleware.common.CommonMiddleware'后面 
    'django.middleware.common.CommonMiddleware',
    ...
]

...

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*',
)

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    # 'VIEW',
)

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'User-agent',
    'x-csrftoken',
    'x-requested-with',
    'token',
)
...

#3.1 POST请求

  • HelloWorld.vue
代码语言:javascript
复制
<template>
	<div>
		<div @click="btnClick()">点击</div>
		<div @click="btnClick2()">POST点击</div>
	</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	data () {
		return {}
	},
	methods:{
        btnClick:function(){
            this.axios.get('/api/user/list-user/').then((response)=>{
                console.log(response.data)
            }).catch((error)=>{
                console.log(error)
            })
        },
        btnClick2:function(){
            this.axios.post('/api/user/create-user/',{
                "username" : "cox2",
                "password" : "cox123456",
            }).then((response)=>{
                console.log(response.data)
            }).catch((error)=>{
               console.log(error.response.status)
            })
        },
	},
}
</script>

在这里插入图片描述
在这里插入图片描述

#4 模块化处理

  • 将axios的相关配置放进一个文件
  • 将所有用的路由接口放进一个文件

#4.1 axios.js

新建 src/utils/axios.js

代码语言:javascript
复制
import axios from 'axios' // 导入node_modules里的axios 

axios.defaults.baseURL = "http://127.0.0.1:8000/"; // 后端接口 ip:port 

export default axios // 导出axios 

#4.2 api.js

新建 src/api/api.js和src/api/index.js

  • index.js
代码语言:javascript
复制
import api_all from './api'

export default {
    api_all
}
  • api.js
代码语言:javascript
复制
import axios from '@/utils/axios' // 导入axios 

const api_all = {
    // 获取所有用户列表
    get_user_list(token) {
        return axios({
            url: '/api/user/list-user/',
            method: 'GET',
            // data: {
            //     token: token
            // },
        })
    }
};

export default api_all // 导出 api_all 

#4.3 开始使用

  • main.js
代码语言:javascript
复制
...
import axios from "./api/"; // 导入axios 
Vue.prototype.$api = axios; // 挂载到原型链上, 在vue组件里面可以通过this拿到

// 使用统一化管理,将以下代码注释掉
// import axios from 'axios'
// import VueAxios from 'vue-axios'
// Vue.use(VueAxios,axios);
// axios.defaults.baseURL = "http://127.0.0.1:8000/";
...
  • HelloWorld.vue
代码语言:javascript
复制
<template>
	<div>
		<div @click="btnClick()">点击</div>
		<div @click="btnClick2()">POST点击</div>
		<div @click="btnClick3()">api点击</div>
	</div>
</template>

<script>
export default {
	name: 'HelloWorld',
	data () {
		return {}
	},
	methods:{
        btnClick:function(){
            // this.axios.get('/api/user/list-user/').then((response)=>{
            //     console.log(response.data)
            // }).catch((error)=>{
            //     console.log(error)
            // })
        },
        btnClick2:function(){
            // this.axios.post(
            //     '/api/user/create-user/',
	        //     {
		    //         "username" : "cox2",
		    //         "password" : "cox123456",
	        //     }
            // ).then((response)=>{
            //     console.log(response.data)
            // }).catch((error)=>{
            //     console.log(error.response.status)
            // })
        },
        btnClick3:function(){
            this.$api.api_all.get_user_list().then((response)=>{
                console.log(response.data)
            }).catch((error)=>{
                console.log(error.response.status)
            })
        },
	},
}
</script>
...

20190918225302-image.png
20190918225302-image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue axios
  • #0 GitHub
  • #1 需求
  • #2 环境
    • #2.1 安装axios
      • 2.2 配置
      • #3 开始
        • #3.1 最简单的Demo
          • #3.1 POST请求
          • #4 模块化处理
            • #4.1 axios.js
              • #4.2 api.js
                • #4.3 开始使用
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档