使用Flask和Vue.js實現(xiàn)前后端分離的全棧開發(fā)

在工作中晰房,我使用Vue.js有一年多了,因為Vue.js文檔完善射沟,上手簡單嫉你,打包方便等諸多優(yōu)勢,所以是目前很流行的前端框架躏惋,本項目也選擇Vue.js作為前端框架幽污。對于后端,本項目選擇的是比較好上手簿姨、輕量級的python后臺框架:Flask距误。

我前前后后花了大概兩周的時間,踩了很多坑扁位,參考了很多博客准潭,最終使用Flask + Vue.js + Vuetify-UI 實現(xiàn)了一個比較新穎的喵星君大大四柱八字排盤系統(tǒng).,這篇文章接下來會將開發(fā)的步驟和代碼一一展示出來域仇,供大家參考刑然,希望大家能少踩點坑。

一暇务、使用Vue-cli搭建前端框架

1泼掠、安裝vue-cli

如果之前安裝過了vue怔软,可以輸入vue --version 來查看當(dāng)前的vue版本是否是3.x以上的版本,如果返回的版本是舊版本 (1.x 或 2.x)择镇,你需要先通過 npm uninstall vue-cli -g 卸載它挡逼。

查看vue-cli版本的命令行

如果提示你vue命令無法識別,那么首先全局安裝vue-cli腻豌,使用如下命令行:

全局安裝vue-cli命令行

安裝了最新版本的vue-cli之后家坎,推薦使用vue ui命令以圖形化界面創(chuàng)建和管理項目,輸入vue ui會彈出一個Vue項目管理器界面吝梅。

輸入vue ui命令虱疏,打開項目管理界面

2、創(chuàng)建Vue項目

創(chuàng)建Vue項目界面

本項目在創(chuàng)建過程勾選了手動配置項目,勾選項如圖所示苏携,創(chuàng)建過程只需要根據(jù)圖形化界面的引導(dǎo)完成創(chuàng)建订框。

勾選Babel,Router, Vuex, Linter配置項
選擇hash路由

在項目的詳情頁兜叨,就可以運行編譯和熱更新穿扳、啟動以及打包你的前端代碼了。

項目管理詳情頁

3国旷、或者直接下載模板矛物,快速啟動項目

如果想利用現(xiàn)成的Vuetify UI組件模板快速建立Vue工程,也可以跳過上述步驟跪但,直接下載Vuetify模塊.

下載模板后履羞,打開工程,輸入命令:npm install屡久, 接著輸入npm run dev忆首,啟動前端工程。

二被环、在Vue工程中增加頁面及路由

找到router.js文件糙及,在該文件增加兩個前端頁面的路由,


import Vue from 'vue'

import Router from 'vue-router'

Vue.use(Router)

export default new Router({

  // mode: 'history',

  // base: process.env.BASE_URL,

  routes: [

    {

      path: '/',

      component: () => import('@/views/dashboard/Index')

    },

    {

          name: 'Result',

          path: 'paipanResult',

          component: () => import('@/views/dashboard/paipanResult'),

    }

  ],

})

在對應(yīng)路徑下增加兩個新頁面筛欢,其中默認首頁為表單頁浸锨,另一個為排盤結(jié)果展示頁。由于采用前后端分離的開發(fā)方式版姑,前端在制作頁面時柱搜,如果后端接口還沒能提供出來,可以先用一些初始化數(shù)據(jù)來代替剥险。

三聪蘸、創(chuàng)建Flask工程

新建一個文件名為index.py的python文件,與vue-project工程并列放置。

新建Flask文件存放路徑

在index.py文件導(dǎo)入Flask相關(guān)包, 代碼如圖健爬。


from flask import Flask, jsonify, request

from flask_cors import CORS

from pyfiles.flask_paipan import * # 從pyfiles文件夾導(dǎo)入已寫好的python庫

from ppbazi import pp

app = Flask(__name__)    #  通過Flask方法注冊app控乾,以后所有的route都是app開頭

app.config.from_object(__name__)

CORS(app, resources={r'/*': {'origins': '*'}})  #  跨域訪問時使用,不跨域可將本行代碼去掉

app.register_blueprint(pp,url_prefix='/paipan')

@app.route('/api/submit', methods=['GET', 'POST']) # 提供接口浑劳,獲取前端頁面的提交的表單參數(shù)阱持,通過調(diào)用其他文件寫好的PaiPan函數(shù)夭拌,獲得排盤結(jié)果魔熏,并以Json格式返回給前端頁面

def submit():   

    response_object = {'status': 'success'}

    if request.method == 'POST':

        post_data = request.get_json()

        year = post_data.get('year')

        month = post_data.get('month')

        day = post_data.get('day')

        hour = post_data.get('hour')

        minute = post_data.get('minute')

        sex = post_data.get('sex')

        city = post_data.get('city')

        birth = [year, month, day, hour, minute]



        exe = PaiPan(year, month, day, hour, minute, city, sex)



        truetime = exe.Sun_Time()

        bazi = exe.Paipan()

        qiyun = exe.Qi_yun()

        canggan = exe.CangGan()

        tengods = exe.Tengod()

        cg_tengods = exe.CangGan_TenGods()

        wangshuai = exe.WangS()



        context = {

            "sexArray": sex,

            "cityArray": city,

            "birthDay": birth,

            ...

        }

        response_object['context'] = context

    else:

        response_object['message'] = 'method is error'

    return jsonify(response_object)

if __name__ == '__main__':

    app.run()

四、Blueprint(藍圖)路徑的配置

在相同路徑下鸽扁,新建ppbazi.py的藍圖文件蒜绽,配置藍圖指向,代碼如下桶现。


from flask import Blueprint,render_template,abort  #  render_template 指向的是templates文件夾

from jinja2 import TemplateNotFound

pp = Blueprint("paipan",__name__,url_prefix="/paipan", template_folder='templates')

@pp.route('/')

def get_sample():

    try:

        return render_template('index.html')

    except TemplateNotFound:

        abort(404)

五躲雅、Vue工程調(diào)用API接口

在表單提交頁面引入axios 庫,并輸入命令行:npm install axios --save 進行安裝骡和。

接著編寫submit方法相赁,在點擊<提交>按鈕時,觸發(fā)該方法慰于,submit方法主要是通過axios調(diào)用上述步驟四完成的API接口钮科,傳入用戶填寫的表單數(shù)據(jù),獲取排盤結(jié)果的數(shù)據(jù)返回婆赠。


<script>

import axios from 'axios'


        submit(){

        const url = ‘http://localhost:5000/api/submit'

        axios.post(url, {

          year: yymmddList[0],

          month: yymmddList[1],

          day: yymmddList[2],

          hour: hhmmssList[0],

          minute: hhmmssList[1],

          sex: this.sex,

          city: this.city,

        })

        .then((response) => {

          console.log('responseData', response)

          this.$router.push({ name: 'Result' })

        })

        }

</script>

六绵脯、打包前端工程,并放入指定路徑

在vue.config.js加入這幾句導(dǎo)出路徑代碼


const path = require('path');

module.exports = {

  ...

  assetsDir: process.env.NODE_ENV === 'production'? '../static' : 'static',

  publicPath: process.env.NODE_ENV === 'production'? './' : '/',

  outputDir: path.resolve(__dirname, '../templates')

}

接著輸入命令行npm run build 對前端程序進行打包休里,最后的打包結(jié)果如圖所示蛆挫。

前端工程打包結(jié)果

七、啟動python程序妙黍,可訪問系統(tǒng)

最后運行index.py程序悴侵,打開瀏覽器輸入http://127.0.0.1:5000/paipan 即可進入網(wǎng)站。

在pycharm啟動index.py程序

網(wǎng)站效果如圖:

表單頁
排盤結(jié)果頁
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拭嫁,一起剝皮案震驚了整個濱河市畜挨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噩凹,老刑警劉巖巴元,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驮宴,居然都是意外死亡逮刨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來修己,“玉大人恢总,你說我怎么就攤上這事〔欠撸” “怎么了片仿?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尤辱。 經(jīng)常有香客問我砂豌,道長,這世上最難降的妖魔是什么光督? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任阳距,我火速辦了婚禮,結(jié)果婚禮上结借,老公的妹妹穿的比我還像新娘筐摘。我一直安慰自己,他們只是感情好船老,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布咖熟。 她就那樣靜靜地躺著,像睡著了一般柳畔。 火紅的嫁衣襯著肌膚如雪馍管。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天荸镊,我揣著相機與錄音咽斧,去河邊找鬼。 笑死躬存,一個胖子當(dāng)著我的面吹牛张惹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岭洲,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼宛逗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盾剩?” 一聲冷哼從身側(cè)響起雷激,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎告私,沒想到半個月后屎暇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡驻粟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年根悼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡挤巡,死狀恐怖剩彬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矿卑,我是刑警寧澤喉恋,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站母廷,受9級特大地震影響轻黑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徘意,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一苔悦、第九天 我趴在偏房一處隱蔽的房頂上張望轩褐。 院中可真熱鬧椎咧,春花似錦、人聲如沸把介。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拗踢。三九已至脚牍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巢墅,已是汗流浹背诸狭。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留君纫,地道東北人驯遇。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像蓄髓,于是被迫代替她去往敵國和親叉庐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345