【flask + vue 前后端分離博客】使用 axios 訪問接口(二)


創建 dev 分支:

$ git checkout -b dev

本章主要是初始化前端項目,並打通前后端接口。

1. 配置 Vue.js

1.1 安裝 vue-cli 腳手架

node 安裝省略,切換 npm 安裝鏡像為淘寶鏡像(速度更快):

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝 vue-cli

F:\My Projects\flask-vuejs-madblog>cnpm install -g vue-cli
F:\My Projects\flask-vuejs-madblog>vue -V       // 查看版本
2.9.6

1.2 初始化前端項目

// 切換到項目目錄中
cd flask-vuejs-madblog

// 使用 vue-js 初始化前端項目,項目名稱為 front-end
F:\My Projects\flask-vuejs-madblog>vue init webpack front-end

? Project name front-end
? Project description A Vue.js project
? Author hubery_jun <jun12xx3@outlook.com>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) npm

   vue-cli · Generated "front-end".


# Installing project dependencies ...
# ========================
# Project initialization finished!
# ========================

To get started:

  cd front-end
  npm run dev

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

安裝依賴:

F:\My Projects\flask-vuejs-madblog>cd front-end

F:\My Projects\flask-vuejs-madblog\front-end>cnpm install

啟動項目:

F:\My Projects\flask-vuejs-madblog\front-end>npm run dev

訪問:http://localhost:8080 看是否正常

2. 使用 axios 與后端進行交互

安裝 axios 用於前端向后端 flask 接口發送請求:

cnpm install axios --save

2.1 CORS 解決跨域問題

前后端兩個獨立的程序運行在不同的端口,要想相互交互,必須要解決跨域問題,后端程序需要安裝:

pip install flask-Cors
pip freeze > requirements.txt

back-end/app/__init__.py 新增:

from config import Config
from flask_cors import CORS


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    # 跨域
    CORS(app)

    # 注冊藍圖 blueprint
    from app.api import bp as api_bp
    app.register_blueprint(api_bp, url_prefix="/api")

    return app

2.2 前后端交互

刪除 front-end/src/components/HelloWorld.vue,再新建一個 front-end/src/components/Ping.vue,內容如下:

<template>
  <div>
      {{ msg }}
  </div>
</template>

<script>
  import axios from 'axios'

  export default {
    name: "Ping",
    data() {
      return {
        msg: ""
      }
    },
    // 生命周期函數,加載頁面時會先執行這個函數,從而調用 getMessage() 方法
    created() {
      this.getMessage();
    },
    methods: {
      getMessage() {
        // 使用 axios 向 flask 發送請求
        const url = "http://127.0.0.1:5000/api/ping";
        axios.get(url)
          .then((res) => {
            this.msg = res.data;
          })
          .catch((error) => {
            console.log(error);
          })
      }

    }
  }
</script>

<style scoped>

</style>

修改路由文件 back-end/src/router/index.js,因為我們刪除了 HelloWorld.vue,創建了 Ping.vue,但是路由還是 HelloWorld 的:

import Vue from 'vue'
import Router from 'vue-router'
import Ping from '@/components/Ping'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Ping',
      component: Ping
    }
  ]
})

運行前端項目:npm run dev,訪問:http://localhost:8080/#/

2.3 安裝 Bootstrap4

Bootstrap4 主要用來添加一些新的樣式,先安裝:

F:\My Projects\flask-vuejs-madblog\front-end>cnpm install bootstrap --save
√ Installed 1 packages
√ Linked 0 latest versions
√ Run 0 scripts
peerDependencies WARNING bootstrap@* requires a peer of jquery@1.9.1 - 3 but none was installed
peerDependencies WARNING bootstrap@* requires a peer of popper.js@^1.16.1 but none was installed
√ All packages installed (1 packages installed from npm registry, used 4s(network 4s), speed 239.27kB/s, json 1(8.22kB), tarball 883.29kB)

首先在 src/main.js 中導入 Bootstrap 的樣式:

import router from './router'

// 導入 Bootstrap4 樣式
import 'bootstrap/dist/css/bootstrap.css'

Vue.config.productionTip = false
...

引入之后,就可以在組建中使用了,Ping.vue

<button type="button" class="btn btn-primary">{{ msg }}</button>

最后的樣式是這樣子的:

3. 提交代碼

合並分支並推送到遠程

$ git add .
$ git commit -m '2. 初始化前端項目,打通前后端接口'
$ git checkout master
$ git merge dev
$ git branch -d dev

$ git push -u origin master

打標簽

$ git tag v0.2
$ git push origin v0.2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM