成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用 Vue.js 和 Flask 來構(gòu)建一個單頁的App

LiuZh / 1222人閱讀

摘要:我們將創(chuàng)建一個簡單的,它將從到返回一個隨機(jī)數(shù)。我們來改變組件顯示隨機(jī)數(shù)在這個階段,我們只是模仿客戶端的隨機(jī)數(shù)生成過程。

在這個教程中,我們將講解如何將vue.js單頁應(yīng)用與Flask后端進(jìn)行連接。

一般來說,如果你只是想通過Flask模板使用vue.js庫也是沒有問題的。但是,實(shí)際上是一個很明顯的問題那就是,Jinja(模板引擎)也和Vue.js一樣采用雙大括號用于渲染,但只是一個還算過的去的解決方案。

我想要一個不同的例子。如果我需要建立一個單頁應(yīng)用程序(應(yīng)用程序使用單頁組成,vue-router在HTML5的History-mode以及其他更多好用的功能)用vue.js,由Flask提供Web服務(wù)?簡單地說應(yīng)該這樣,如下所示:

Flask為index.html服務(wù),index.html包含我的vue.js App。

在前端開發(fā)中我使用Webpack,它提供了所有很酷的功能。

Flask有API端,我可以從我的SPA訪問。

我可以訪問API端,甚至當(dāng)我為了前端開發(fā)而運(yùn)行Node.js的時候。

聽起來是不是很有趣?那讓我們這樣動手做做吧。

完整的源代碼,你可以在這里找到:

https://github.com/oleg-agapo...

客戶端

我將使用Vue CLI產(chǎn)生基本vue.js App。如果你還沒有安裝它,請運(yùn)行:

$ npm install -g vue-cli

客戶端和后端代碼將被拆分到不同的文件夾。初始化前端部分運(yùn)行跟蹤:

$ mkdir flaskvue
$ cd flaskvue
$ vue init webpack frontend

通過安裝向?qū)?。我的設(shè)置是:

Vue?只在運(yùn)行時構(gòu)建。?

安裝Vue-router。

使用ESLint檢查代碼。

選擇一個ESLint?標(biāo)準(zhǔn)預(yù)設(shè)?。

不試用Karma + Mocha進(jìn)行單位測試。

不使用Nightwatch建立端到端的測試。

ok,接著來:

$ cd frontend
$ npm install
# after installation
$ npm run dev

這就可以開始安裝vue.js應(yīng)用程序。讓我們從添加一些頁面開始吧。

添加home.vueabout.vuefrontend/src/components文件夾。它們非常簡單,像這樣:

// Home.vue

and

// About.vue

我們將使用它們正確地識別我們當(dāng)前的位置(根據(jù)地址欄)?,F(xiàn)在我們需要改變frontend/src/router/index.js文件以便使用我們的新組件:

import Vue from "vue"
import Router from "vue-router"
const routerOptions = [
{ path: "/", component: "Home" },
{ path: "/about", component: "About" }
]

const routes = routerOptions.map(route => {
return {
...route,
component: () => import(`@/components/${route.component}.vue`)
}

})

Vue.use(Router)
export default new Router({
routes,
mode: "history"
})

如果你試著輸入localhost:8080localhost:8080/about,你應(yīng)該看到相應(yīng)的頁面。

我們幾乎已經(jīng)準(zhǔn)備好構(gòu)建一個項(xiàng)目,并且能夠創(chuàng)建一個靜態(tài)資源文件包。在此之前,讓我們?yōu)樗鼈冎匦露x一下輸出目錄。在frontend/config/index.js找到下一個設(shè)置:

index: path.resolve(__dirname, "../dist/index.html"),
assetsRoot: path.resolve(__dirname, "../dist"),

把它們改為

index: path.resolve(__dirname, "../../dist/index.html"),
assetsRoot: path.resolve(__dirname, "../../dist"),

所以/dist文件夾的HTML、CSS、JS會在同一級目錄/frontend ?,F(xiàn)在你可以運(yùn)行 $ npm run build 創(chuàng)建一個包。

后端

對于Flask服務(wù)器,我將使用Python版本3.6。在 /flaskvue創(chuàng)建新的子文件夾存放后端代碼并初始化虛擬環(huán)境:

$ mkdir backend
$ cd backend
$ virtualenv -p python3 venv

為了使虛擬環(huán)境中運(yùn)行(MacOS):

$ source venv/bin/activate

在Windows中需要激活此文檔(http://pymote.readthedocs.io/...)。

在虛擬環(huán)境下安裝:

(venv) pip install Flask

現(xiàn)在讓我們?yōu)镕lask服務(wù)端編寫代碼。創(chuàng)建根目錄文件run.py:

(venv) cd ..
(venv) touch run.py

向這個文件添加下一個代碼:

from flask import Flask, render_template
app = Flask(__name__,
static_folder = "./dist/static",
template_folder = "./dist")

@app.route("/")
def index():
return render_template("index.html")

這段代碼與Flask的 “Hello World”代碼略有不同。主要的區(qū)別是,我們指定存儲靜態(tài)文件和模板位置在文件夾 /dist,以便和我們的前端文件夾區(qū)別開。在根文件夾中運(yùn)行Flask服務(wù)端:

(venv) FLASK_APP=run.py FLASK_DEBUG=1 flask run

這將啟動本地主機(jī)上的Web服務(wù)器:localhost:5000 上的FLASK_APP服務(wù)器端的啟動文件,flask_debug = 1將運(yùn)行在調(diào)試模式。如果一切正確,你會看到熟悉的主頁,你已經(jīng)完成了對Vue的設(shè)置。

同時,如果您嘗試輸入/about頁面,您將面臨一個錯誤。Flask拋出一個錯誤,說找不到請求的URL。事實(shí)上,因?yàn)槲覀兪褂昧薍TML5的History-Mode在Vue-router需要配置Web服務(wù)器的重定向,將所有路徑指向index.html。用Flask做起來很容易。將現(xiàn)有路由修改為以下:

@app.route("/", defaults={"path": ""})
@app.route("/")
def catch_all(path):
return render_template("index.html")

現(xiàn)在輸入網(wǎng)址localhost:5000/about 將重新定向到index.html和vue-router將處理路由。

添加404頁

因?yàn)槲覀冇幸粋€包羅萬象的路徑,我們的Web服務(wù)器在現(xiàn)在已經(jīng)很難趕上404錯誤,F(xiàn)lask將所有請求指向index.html(甚至不存在的頁面)。所以我們需要處理未知的路徑在vue.js應(yīng)用。當(dāng)然,所有的工作都可以在我們的路由文件中完成。

在frontend/src/router/index.js添加下一行:

const routerOptions = [
{ path: "/", component: "Home" },
{ path: "/about", component: "About" },
{ path: "*", component: "NotFound" }
]

這里的路徑"*"是一個通配符,
Vue-router就知道除了我們上面定義的所有其他任何路徑?,F(xiàn)在我們需要更多的創(chuàng)造NotFound.vue文件在/components目錄。試一下很簡單:

// NotFound.vue

現(xiàn)在運(yùn)行的前端服務(wù)器再次npm run dev,嘗試進(jìn)入一些毫無意義的地址例如:localhost:8080/gljhewrgoh。您應(yīng)該看到我們的“未找到”消息。

添加API端

我們的vue.js/flask教程的最后一個例子將是服務(wù)器端API創(chuàng)建和調(diào)度客戶端。我們將創(chuàng)建一個簡單的Api,它將從1到100返回一個隨機(jī)數(shù)。

打開run.py并添加:

from flask import Flask, render_template, jsonify
from random import *

app = Flask(__name__,
static_folder = "./dist/static",
template_folder = "./dist")

@app.route("/api/random")

def random_number():
response = {
"randomNumber": randint(1, 100)
}
return jsonify(response)

@app.route("/", defaults={"path": ""})
@app.route("/")
def catch_all(path):

return render_template("index.html")

首先我導(dǎo)入random庫和jsonify函數(shù)從Flask庫中。然后我添加了新的路由 /api/random來返回像這樣的JSON:

{
"randomNumber": 36
}

你可以通過本地瀏覽測試這個路徑:localhost:5000/api/random。

此時服務(wù)器端工作已經(jīng)完成。是時候在客戶端顯示了。我們來改變home.vue組件顯示隨機(jī)數(shù):


在這個階段,我們只是模仿客戶端的隨機(jī)數(shù)生成過程。所以,這個組件就是這樣工作的:

在初始化變量 randomNumber等于0。

在methods部分我們通過getRandomInt(min, max)功能來從指定的范圍內(nèi)返回一個隨機(jī)數(shù),getrandom函數(shù)將生成隨機(jī)數(shù)并將賦值給randomNumber

組件方法getrandom創(chuàng)建后將會被調(diào)用來初始化隨機(jī)數(shù)

在按鈕的單擊事件我們將用getrandom方法得到新的隨機(jī)數(shù)

現(xiàn)在在主頁上,你應(yīng)該看到前端顯示我們產(chǎn)生的隨機(jī)數(shù)。讓我們把它連接到后端。

為此目的,我將用axios庫。它允許我們用響應(yīng)HTTP請求并用Json返回JavaScript Promise。我們安裝下它:

(venv) cd frontend
(venv) npm install --save axios

打開 home.vue 再在

后記

最后,我想就如何改進(jìn)這個解決方案談幾句話。

首先利用CORS,如果你想讓你的API端訪問外部的服務(wù)器。否則的話只需要使用代理服務(wù)器與前端開發(fā)技巧。

另一個改進(jìn)是避免客戶端硬編碼API路由。也許你需要考慮一些API端點(diǎn)的字典。因此,當(dāng)您更改API路由時,只需刷新一個字典即可。前端仍然有一個有效的端點(diǎn)。

通常在開發(fā)過程中,你將至少有2個終端窗口:一個是Flask和另一個是vue.js。在生產(chǎn)中可以擺脫Vue而只多帶帶運(yùn)行Node.js服務(wù)器。

源代碼:https://github.com/oleg-agapo...

謝謝你的閱讀!

分享一個Vue.js 2 的入門級全家桶系列教程:

vue.js 2 入門與提高: http://xc.hubwiz.com/course/vue.js

vuex 2 入門與提高: http://xc.hubwiz.com/course/vuex

vue-router 2 入門與提高: http://xc.hubwiz.com/course/vuerouter

vue.js 2 工程化實(shí)踐: http://xc.hubwiz.com/course/vuegch

另外推薦一個flask的入門教程:

深入淺出 flask http://xc.hubwiz.com/course/562427361bc20c980538e26f

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44651.html

相關(guān)文章

  • [使用 Weex Vue 開發(fā)原生應(yīng)用] 6 使用 vue-router

    摘要:使用值來作路由。原生應(yīng)用本身就是多頁的場景,頁面間狀態(tài)的隔離比共享更重要一些。使用開發(fā)的是原生應(yīng)用,頁面棧的管理使用的也是原生的特性,沒有但是有模塊可以實(shí)現(xiàn)頁面的前進(jìn)和后退等操作。 系列文章的目錄在 ? 這里 (由于 我比較懶 最近一段時間在忙其他事,系列文章拖了好久終于又更新了。。。) 什么是 vue-router ? vue-router 官方文檔 vue-router 是針對 V...

    leonardofed 評論0 收藏0
  • 使用 Vuex + Vue.js 構(gòu)建單頁應(yīng)用【新篇】

    摘要:使用構(gòu)建單頁應(yīng)用新篇在去年的七月六號的時候,發(fā)布了一篇使用構(gòu)建單頁應(yīng)用的文章,文章主要是介紹的基本使用方法,發(fā)現(xiàn)對大部分的入門同學(xué)有很大的幫助,時至今日還有很多同學(xué)不斷的點(diǎn)贊與收藏,瀏覽量最高達(dá)到。 使用 Vuex + Vue.js 構(gòu)建單頁應(yīng)用【新篇】 在去年的七月六號的時候,發(fā)布了一篇 使用 Vuex + Vue.js 構(gòu)建單頁應(yīng)用 的文章,文章主要是介紹 vuex 的基本使用方法...

    crelaber 評論0 收藏0
  • Vue.js 實(shí)踐(2):實(shí)現(xiàn)多條件篩選、搜索、排序及分頁的表格功能

    摘要:基礎(chǔ)布局的中主要為部分,分別是用于搜索篩選和分頁的表單控件用于排序表格的表頭以及用于展示數(shù)據(jù)的。這也是前瞻發(fā)布之后,提出廢棄部分功能后許多人反應(yīng)較為強(qiáng)烈的原因。 與上周的第一篇實(shí)踐教程一樣,在這篇文章中,我將繼續(xù)從一種常見的功能——表格入手,展示Vue.js中的一些優(yōu)雅特性。同時也將對filter功能與computed屬性進(jìn)行對比,說明各自的適用場景,也為vue2.0版本中即將刪除的部...

    Profeel 評論0 收藏0
  • Vue.js 實(shí)踐(2):實(shí)現(xiàn)多條件篩選、搜索、排序及分頁的表格功能

    摘要:基礎(chǔ)布局的中主要為部分,分別是用于搜索篩選和分頁的表單控件用于排序表格的表頭以及用于展示數(shù)據(jù)的。這也是前瞻發(fā)布之后,提出廢棄部分功能后許多人反應(yīng)較為強(qiáng)烈的原因。 與上周的第一篇實(shí)踐教程一樣,在這篇文章中,我將繼續(xù)從一種常見的功能——表格入手,展示Vue.js中的一些優(yōu)雅特性。同時也將對filter功能與computed屬性進(jìn)行對比,說明各自的適用場景,也為vue2.0版本中即將刪除的部...

    ChanceWong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<