vue-admin-template 4.0+ 设置baseUrl 使用 springboot 后端数据 2020年5月

 坑货,折腾了我不少时间,网上全是之前俩版本的设置方法。

第一个版本:

项目内有个 config 包,里面有对应的 dev 和 pro 俩环境的设置方法,里面地址用的baseUrl是在线mock数据获取,直接改动那个mock地址为自己的 后端地址就可以了。

第二个版本:

项目里有个 vue.config.js 文件,里面有个 devServer{},注掉 after:require(“xx/mock.js”)这一行,有个 proxy{},配置在target里就可以了(这个版本的解决方案网上最多了,自己搜下就行)。

第三个版本:

(一)注掉生产环境使用的在线mock数据获取,在main.js里面

 

(二)注掉vue.config.js里面使用的开发环境mock数据获取

PS:因为默认不再使用代理,所以需要后端配置跨域,springboot 在controller上添加注解解决跨域

import org.springframework.web.bind.annotation.*;

@CrossOrigin

(三)修改.env.XXX(相应环境) 文件中配置(没错,就是在这里配置,之所以坑是因为它的自动拼接本地地址对我造成了干扰)

更改后查看是否成功:

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你好!将 vue-admin-template 前端模板与 Django 后台对接,需要进行以下步骤: 1. 安装 vue-admin-template,创建项目; 2. 配置 Axios,设置请求拦截器和响应拦截器; 3. 在 vue-admin-template 中编写登录页面,使用 Axios 向 Django 后台发送登录请求; 4. 在 Django 后台编写登录 API 接口; 5. 在 vue-admin-template 中编写路由守卫,判断用户是否已经登录; 6. 在 vue-admin-template 中编写退出登录的代码; 7. 在 Django 后台创建 View 和 Model。 具体操作步骤如下: 1. 安装 vue-admin-template,创建项目 安装 vue-admin-template,可以使用以下命令: ``` vue init vuejs-templates/admin my-project ``` 安装完成后,进入项目目录并启动项目: ``` cd my-project npm install npm run dev ``` 2. 配置 Axios,设置请求拦截器和响应拦截器 在 `src/utils/request.js` 文件中,配置 Axios,设置请求拦截器和响应拦截器: ``` import axios from 'axios' import { Message } from 'element-ui' import store from '@/store' import { getToken } from '@/utils/auth' // 创建 Axios 实例 const service = axios.create({ baseURL: process.env.BASE_API, timeout: 5000 }) // 请求拦截器 service.interceptors.request.use( config => { // 设置请求头中的 Authorization 字段 if (store.getters.token) { config.headers['Authorization'] = getToken() } return config }, error => { console.log(error) return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response => { const res = response.data if (res.code !== 20000) { Message({ message: res.message || 'Error', type: 'error', duration: 5 * 1000 }) return Promise.reject(new Error(res.message || 'Error')) } else { return res } }, error => { console.log('err' + error) Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) export default service ``` 3. 在 vue-admin-template 中编写登录页面,使用 Axios 向 Django 后台发送登录请求 在 `src/views/login/index.vue` 文件中,编写登录页面,使用 Axios 向 Django 后台发送登录请求: ``` <template> <div class="login-container"> <div class="login-box"> <h2 class="login-title">Login</h2> <el-form :model="loginForm" :rules="rules" ref="loginForm" class="login-form"> <el-form-item prop="username"> <el-input v-model="loginForm.username" placeholder="Username"></el-input> </el-form-item> <el-form-item prop="password"> <el-input type="password" v-model="loginForm.password" placeholder="Password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="login">Login</el-button> </el-form-item> </el-form> </div> </div> </template> <script> import { login } from '@/api/user' import { setToken } from '@/utils/auth' export default { name: 'Login', data() { return { loginForm: { username: '', password: '' }, rules: { username: [{ required: true, message: 'Please input username', trigger: 'blur' }], password: [{ required: true, message: 'Please input password', trigger: 'blur' }] } } }, methods: { async login() { try { await this.$refs.loginForm.validate() const res = await login(this.loginForm) setToken(res.token) this.$router.push({ path: '/' }) } catch (error) { console.log(error) } } } } </script> ``` 在 `src/api/user.js` 文件中,定义登录接口: ``` import request from '@/utils/request' export function login(data) { return request({ url: '/api/login/', method: 'post', data }) } ``` 4. 在 Django 后台编写登录 API 接口 在 Django 后台编写登录 API 接口,例如: ``` from django.contrib.auth import authenticate, login from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response @api_view(['POST']) def login_view(request): username = request.data.get('username') password = request.data.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return Response({'token': 'your_token_here'}) else: return Response({'error': 'Invalid username or password'}, status=status.HTTP_401_UNAUTHORIZED) ``` 5. 在 vue-admin-template 中编写路由守卫,判断用户是否已经登录 在 `src/permission.js` 文件中,编写路由守卫,判断用户是否已经登录: ``` import router from './router' import { getToken } from '@/utils/auth' const whiteList = ['/login'] router.beforeEach(async(to, from, next) => { const hasToken = getToken() if (hasToken) { if (to.path === '/login') { next({ path: '/' }) } else { next() } } else { if (whiteList.indexOf(to.path) !== -1) { next() } else { next(`/login?redirect=${to.path}`) } } }) ``` 6. 在 vue-admin-template 中编写退出登录的代码 在 `src/views/layout/components/Header.vue` 文件中,编写退出登录的代码: ``` <template> <div class="header"> <div class="header-left"> <img src="@/assets/logo.png" alt="" class="logo"> <el-menu class="menu" :default-active="$route.path" mode="horizontal" background-color="#fff" text-color="#333" active-text-color="#409EFF"> <el-menu-item index="/">Dashboard</el-menu-item> <el-submenu index="user"> <template slot="title">User</template> <el-menu-item index="/user">User List</el-menu-item> </el-submenu> </el-menu> </div> <div class="header-right"> <el-dropdown trigger="click"> <span class="user-info"> <span class="name">{{ $store

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值