宽客秀

宽客秀

Quant.Show的Web3站点,Archives from quant.show

基於VUE和Flask的英文詞雲網站

一、項目概述#

項目前端用 Vue,後端用 Python 的 Web 框架 Flask ,開發了一個可生成英文詞雲的網站。項目的前後端分離,通過 axios 進行通訊。

開發環境:

  • Windows 11(前後端都在本地)
  • node.js v16.14.0
  • vue-cli
  • axios
  • python 3.8.5

Project 最終目錄結構:

d2b5ca33bd970f64a6301fa75ae2eb22

二、前端開發#

1、node.js 環境安裝(略)#

npm:  node.js 下的包管理器。

安裝後,可通過 echo % PATH%,查看到是否正確地加到 PATH 路徑中。

d2b5ca33bd970f64a6301fa75ae2eb22 2

2、vue-cli 安裝#

vue-cli: 用戶生成 Vue 工程的模板,可以快速開始一個 vue 的項目,也就是給你一套 vue 的結構,包含基礎的依賴庫,只需要 npm install 就可以安裝。

d2b5ca33bd970f64a6301fa75ae2eb22 1

3、創建 Project#

創建名為 world-cloud 的項目目錄(此處 world 拼寫錯誤了,符合主題的應該是 word,不過不影響開發)

d2b5ca33bd970f64a6301fa75ae2eb22 3

通過 webpack 生成初始的 frontend 結構。webpack 的主要用途是通過 CommonJS 的語法把所有瀏覽器端需要發布的靜態資源作相應的準備,比如資源的合併和打包。

d2b5ca33bd970f64a6301fa75ae2eb22 5

可以通過 npm run dev 來啟動前端頁面做驗證,在這之前先做一下 npm install。

d2b5ca33bd970f64a6301fa75ae2eb22 6

如果 npm install 失敗的話,原因可能是速度太慢,此時可以通過配置鏡像站來實現提速 npm config set registry=http://registry.npm.taobao.org 。如果成功。則可無視。

d2b5ca33bd970f64a6301fa75ae2eb22 7

d2b5ca33bd970f64a6301fa75ae2eb22 8

執行 npm run dev,可以看到 “Your application is running here: http://localhost:8080” 的提示。

d2b5ca33bd970f64a6301fa75ae2eb22 9

訪問http://localhost:8080,看到如下頁面,則表示前端環境成功安裝。此時檢查 frontend 目錄,會發現默認幫我們生成了一些目錄結構及代碼。

d2b5ca33bd970f64a6301fa75ae2eb22 10

4、安裝 element-ui#

Element 是一套為開發者、設計師和產品經理準備的基於 Vue 2.0 的桌面端組件庫。

d2b5ca33bd970f64a6301fa75ae2eb22 11

在 /src/main.js 中導入 ElementUI,並使用

d2b5ca33bd970f64a6301fa75ae2eb22 12

5、安裝 axios#

因為 vue 的邊界比較清晰,就是為了處理 DOM,所以並不具備通訊功能。此時就需要額外使用一個通訊框架與伺服器交互。目前比較推薦的是 axios,說穿了 axios 就是用來與後端伺服器通訊的。

d2b5ca33bd970f64a6301fa75ae2eb22 13

d2b5ca33bd970f64a6301fa75ae2eb22 14

6、英文詞雲頁面#

先把 App.vue 中不需要的 logo 刪掉。

在 src 目錄下建立 pages/WordCloud.vue

在 src/router/index.js 修改一下路由,注意要先註冊(import WordCloud)

d2b5ca33bd970f64a6301fa75ae2eb22 16

最後打包一下資源

d2b5ca33bd970f64a6301fa75ae2eb22 15

上述執行完成後,會把資源打包到 frontend/dist 目錄。前端開發就算完成了。前端完成後其目錄結構的具體效果可參考如下。

3291137659605de718146517a7c5c378

三、後端開發#

1、Python 安裝(略)#

2、創建 Python 虛擬環境#

Python 虛擬環境可以為 Python 項目提供獨立的運行環境,使得不同的應用使用不同的 Python 版本。注意一下,在 Windows 下和 Linux 下的激活 cmd 是不一樣的,不要混淆。

d2b5ca33bd970f64a6301fa75ae2eb22 18

3、安裝 Flask#

d2b5ca33bd970f64a6301fa75ae2eb22 19

4、安裝詞雲生成庫 wordcloud#

d2b5ca33bd970f64a6301fa75ae2eb22 20

5、Flask 開發#

首先,在 **_**_init__.py 中修改 python 默認 html 和靜態資源目錄,這個資源就是我們上面在前端開發中通過 npm run build 生成的資源目錄。

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

其次,routes.py 裡面的代碼,就是主頁面和生成詞雲的接口。

from flask import render_template
from flask import request
from app import app
from wordcloud import WordCloud
import io
import base64

真正調用詞雲庫生成圖片#

def get_word_cloud(text):
# font = "./SimHei.ttf"
# pil_img = WordCloud(width=500, height=500, font_path=font).generate(text=text).to_image()

pil\_img = WordCloud(width=800, height=300, background\_color="white").generate(text=text).to\_image()
img = io.BytesIO()
pil\_img.save(img, "PNG")
img.seek(0)
img\_base64 = base64.b64encode(img.getvalue()).decode()
return img\_base64

主頁面#

@app.route('/')
@app.route('/index')
def index():
#return "Hello, World!"
return render_template('index.html')

生成詞雲圖片接口,以 base64 格式返回#

@app.route('/word/cloud/generate', methods=["POST"])
def cloud():
text = request.json.get("word")
res = get_word_cloud(text)
return res

6、啟動 Flask#

d2b5ca33bd970f64a6301fa75ae2eb22 21

要注意的是,根據提示輸出 Running on http://127.0.0.1:5000/ 可知,Flask 服務僅僅可以在本地伺服器地址 127.0.0.1 訪問。當我們開發項目調試時,訪問項目的就是本機,本機能夠正常訪問;而目前這個狀態下,只有伺服器自己能訪問,其他設備作為外網設備並不能訪問服務。解決的方法是修改對應的 host 參數,將其指定為 0.0.0.0,這樣系統就會監聽任意 IP 地址而不僅僅是本機。

7、驗證成功#

d2b5ca33bd970f64a6301fa75ae2eb22 22

至此完成了英文詞雲網站的開發,麻雀雖小,但確實做到了前後端分離。注意 Flask 因為是在虛擬環境中安裝的,所以再次啟動前需要先啟動虛擬環境。

參考文獻:#

A single page application with Flask and Vue.

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。