使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django]

Posted 双鬼带单

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django]相关的知识,希望对你有一定的参考价值。

使用Vue完成前后端分离开发(一)

Not all those who wander are lost.
彷徨者并非都迷失方向。

Table of Contents

  • 使用Vue完成前后端分离开发(一)

  • 前言

  • 环境准备

    • nodejs

    • vue-cli

  • 创建 Vue 项目

  • 项目结构

  • 使用 elementUI

  • 配置 Vuex

  • 配置 axios

  • 功能页面

    • 主体页面

    • 登录页面

  • 参考

当你看到这篇文章的时候,暂且认为你对 Vue前后端分离已经有了基本的了解.

前言

本篇题为 使用Vue,SpringBoot,Flask,Django完成Vue前后端分离开发 将通过一个项目整合( 一前端项目对应三个后端项目),完成一个简单的DEMO

其中前端项目使用 Vue.js,这个项目将会用到 vue, vuex, vue-route, axios, elementUI

后端项目使用为 3 个项目,其中涉及 SpringBoot,Flask,Django

  • SpringBootSpringMVCJPASpringDataREST

  • FlaskSQLAlchemy

  • DjangoDjangoREST framework

环境准备

作为第一篇,这里主要介绍 Vue环境的准备工作.

nodejs

根据实际情况下载对应版本即可

安装完成后,在控制台中输入: node-v 即可得知安装的 node版本,使用 npm-v 查看 npm 版本

 
   
   
 
  1. Administrator@RENRENR-21HL6LG MINGW64 ~

  2. $ node -v

  3. v8.11.1

  4. Administrator@RENRENR-21HL6LG MINGW64 ~

  5. $ npm -v

  6. 5.6.0

vue-cli

如果上面已经验证正确安装了 nodenpm, 则使用 npm install-g vue-cli 完成 vue-cli 的安装

创建 Vue 项目

给项目起名字一直是困扰我的第一个难题,本次将项目暂命名为 mercury(水星)

使用 vue-cli 命令生成项目,命令格式为: vue init webpackVue-Project, 这里为 vue init webpack mercury,

根据提示填写项目信息:

 
   
   
 
  1. ? Project name (mercury)

  2. ? Project name mercury

  3. ? Project description (A Vue.js project)

  4. ? Project description A Vue.js project

  5. ? Author (zyndev <zyndev@gmail.com>)

  6. ? Author zyndev <zyndev@gmail.com>

  7. ? Vue build standalone

  8. ? Install vue-router? (Y/n) y

  9. ? Install vue-router? Yes

  10. ? Use ESLint to lint your code? (Y/n) y

  11. ? Use ESLint to lint your code? Yes

  12. ? Pick an ESLint preset (Use arrow keys)

  13. ? Pick an ESLint preset Standard

  14. ? Set up unit tests (Y/n) n

  15. ? Set up unit tests No

  16. ? Setup e2e tests with Nightwatch? (Y/n) n

  17. ? Setup e2e tests with Nightwatch? No

使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django](一)

安装过程可能有点慢,安装完成后,如下

 
   
   
 
  1. # Project initialization finished!

  2. # ========================

  3. To get started:

  4.  cd mercury

  5.  npm run dev

  6. Documentation can be found at https://vuejs-templates.github.io/webpack

这时,我们可以进入 mercury, 并在控制台运行 npm run dev,即可开始运行我们的项目

 
   
   
 
  1. Administrator@RENRENR-21HL6LG MINGW64 /d/scoding

  2. $ cd mercury/

  3. Administrator@RENRENR-21HL6LG MINGW64 /d/scoding/mercury

  4. $ npm run dev

  5. > mercury@1.0.0 dev D:\scoding\mercury

  6. > webpack-dev-server --inline --progress --config build/webpack.dev.conf.js

  7. 95% emitting DONE  Compiled successfully in 5892ms13:59:42

  8. I  Your application is running here: http://localhost:8080

从控制台信息可以看出,访问路径为: http://localhost:8080

使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django](一)

这样准备工作基本就完成了

项目结构

这里使用了 VSCode,打开项目后如图: 

使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django](一)

 
   
   
 
  1. ├── build/                      # webpack config files

  2.   └── ...

  3. ├── config/

  4.   ├── index.js                # main project config

  5.   └── ...

  6. ├── src/

  7.   ├── main.js                 # app entry file

  8.   ├── App.vue                 # main app component

  9.   ├── components/             # ui components

  10.     └── ...

  11.   └── assets/                 # module assets (processed by webpack)

  12.       └── ...

  13. ├── static/                     # pure static assets (directly copied)

  14. ├── .babelrc                    # babel config

  15. ├── .editorconfig               # indentation, spaces/tabs and similar settings for your editor

  16. ├── .eslintrc.js                # eslint config

  17. ├── .eslintignore               # eslint ignore rules

  18. ├── .gitignore                  # sensible defaults for gitignore

  19. ├── .postcssrc.js               # postcss config

  20. ├── index.html                  # index.html template

  21. ├── package.json                # build scripts and dependencies

  22. └── README.md                   # Default README file

其中,我们主要修改 src 下文件,上面提到项目访问端口为: 8080, 为了防止与其他项目造成冲突,这里将端口改为: 7080, 具体配置在 config/index.js 文件中

使用 elementUI

这里使用了 官网:http://element-cn.eleme.io/#/zh-CN/component/installation

这里我们进入刚才的项目目录:并执行 npm i element-ui-S

 
   
   
 
  1. Administrator@RENRENR-21HL6LG MINGW64 /d/scoding/mercury

  2. $ npm i element-ui -S

  3. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.3 (node_modules\fsevents):

  4. npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

  5. + element-ui@2.3.8

  6. added 6 packages in 56.176s

配置

在 main.js 中写入以下内容:

 
   
   
 
  1. import Vue from 'vue';

  2. import ElementUI from 'element-ui';

  3. import 'element-ui/lib/theme-chalk/index.css';

  4. import App from './App.vue';

  5. Vue.use(ElementUI);

  6. new Vue({

  7.  el: '#app',

  8.  render: h => h(App)

  9. });

配置完成后的 main.js 文件为:

 
   
   
 
  1. import Vue from 'vue'

  2. import ElementUI from 'element-ui'

  3. import 'element-ui/lib/theme-chalk/index.css'

  4. import App from './App'

  5. import router from './router'

  6. Vue.config.productionTip = false

  7. Vue.use(ElementUI)

  8. /* eslint-disable no-new */

  9. new Vue({

  10.  el: '#app',

  11.  router,

  12.  render: h => h(App),

  13.  components: { App },

  14.  template: '<App/>'

  15. })

配置 Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

也就是通过 Vuex ,各个组件可以实时的共享状态

官网:https://vuex.vuejs.org/zh-cn/intro.html

安装

首先我们先安装它 npm install vuex--save

 
   
   
 
  1. $ npm i vuex -S

  2. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.3 (node_modules\fsevents):

  3. npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

  4. + vuex@3.0.1

  5. added 1 package in 26.761s

配置

首先在 src 下创建 store 文件夹并在其下创建 store.js 文件 即 src/store/store.js, 同时创建 src/assets/util/cookie.js

src/assets/util/cookie.js 文件内容

该文件主要用于操作cookie

 
   
   
 
  1. let cookie = {

  2.  setCookie (cname, value, expiredays) {

  3.    let exdate = new Date()

  4.    exdate.setTime(exdate.getTime() + expiredays)

  5.    exdate.setDate(exdate.getDate() + expiredays) 

  6.    document.cookie = cname + '=' + escape(value) + ((expiredays == null) ? '' : ';expires=' + exdate.toGMTString())

  7.  },

  8.  getCookie (name) {

  9.    let reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')

  10.    let arr = document.cookie.match(reg)

  11.    if (arr) {

  12.      return (arr[2])

  13.    } else {

  14.      return null

  15.    }

  16.  },

  17.  delCookie (name) {

  18.    let exp = new Date()

  19.    exp.setTime(exp.getTime() - 1)

  20.    let cval = cookie.getCookie(name)

  21.    if (cval != null) {

  22.      document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'

  23.    }

  24.  }

  25. }

  26. export default cookie

src/store/store.js 内容

这里定义了 userInfo 用来保存当前的用户信息,包含一个 nametoken

 
   
   
 
  1. import Vue from 'vue'

  2. import Vuex from 'vuex'

  3. import cookie from '../assets/util/cookie'

  4. Vue.use(Vuex)

  5. const userInfo = {

  6.  name: cookie.getCookie('name') || '',

  7.  token: cookie.getCookie('token') || ''

  8. }

  9. const store = new Vuex.Store({

  10.  state: {

  11.    userInfo: userInfo

  12.  },

  13.  mutations: {

  14.    setUserInfo (state) {

  15.      state.userInfo = {

  16.        name: cookie.getCookie('name'),

  17.        token: cookie.getCookie('token'),

  18.      }

  19.    }

  20.  }

  21. })

  22. export default store

main.js 添加 Vuex配置,

 
   
   
 
  1. import Vue from 'vue'

  2. import ElementUI from 'element-ui'

  3. import 'element-ui/lib/theme-chalk/index.css'

  4. import App from './App'

  5. import router from './router'

  6. import store from './store/store'

  7. Vue.config.productionTip = false

  8. Vue.use(ElementUI)

  9. /* eslint-disable no-new */

  10. new Vue({

  11.  el: '#app',

  12.  router,

  13.  store,

  14.  render: h => h(App),

  15.  components: { App },

  16.  template: '<App/>'

  17. })

配置 axios

功能页面

主体页面

登录页面

参考

  • nodejs : https://nodejs.org

  • vue : https://vuejs.org/

  • vuex : https://vuex.vuejs.org/

  • vue-route : https://router.vuejs.org/

  • elementUI : http://element-cn.eleme.io/#/zh-CN/component/installation

  • axios :



以上是关于使用Vue完成前后端分离开发[Spring Boot, Vue, Flask, Django]的主要内容,如果未能解决你的问题,请参考以下文章

全栈的自我修养: 002使用@vue/cli进行vue.js环境搭建 (使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发)

手把手教你搭建Spring Boot+Vue前后端分离

前后端分离之 vue+JWT+Spring Boot

springboot可以前后端分离吗

Spring Boot+Vue 前后端分离项目架构

前后端分离 Spring Boot + Vue 开发网易云&QQ音乐(附源码)!