作者:snowspace@掘金


前言大家好,我是菜鳥哥!Python里面兩大最牛的Web框架,一個是Django,一個是Flask 。今天就分享一個用Flask做的詞云生成網(wǎng)站,非常有意思的小web,適" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Python Web實(shí)戰(zhàn):Flask + Vue 開發(fā)一個漂亮的詞云網(wǎng)站

Python Web實(shí)戰(zhàn):Flask + Vue 開發(fā)一個漂亮的詞云網(wǎng)站

時間:2023-05-30 18:24:02 | 來源:網(wǎng)站運(yùn)營

時間:2023-05-30 18:24:02 來源:網(wǎng)站運(yùn)營

Python Web實(shí)戰(zhàn):Flask + Vue 開發(fā)一個漂亮的詞云網(wǎng)站:

作者:snowspace@掘金


前言

大家好,我是菜鳥哥!Python里面兩大最牛的Web框架,一個是Django,一個是Flask 。今天就分享一個用Flask做的詞云生成網(wǎng)站,非常有意思的小web,適合練手。

這是一個前端用 Vue,后端用 Python 的 Web 框架 Flask 開發(fā)的詞云生成應(yīng)用,代碼已上傳到 flask-vue-word-cloud

項(xiàng)目地址:https://github.com/77Y/flask-vue-word-cloud

寫這個小項(xiàng)目的起因是最近團(tuán)隊(duì)年終述職,有一些大佬的 PPT 上用了詞云來展示自己團(tuán)隊(duì)一年的工作成果;還有大佬說不要守著自己的一畝三分地,在技術(shù)上拓寬視野可以幫助我們更好的成長

正好之前接觸過 Python 和 R 生成詞云,于是作為一個移動端開發(fā)者,想在本地跑一個生成詞云的服務(wù),就有了這個項(xiàng)目

目錄結(jié)構(gòu)

先簡單看一下項(xiàng)目的目錄結(jié)構(gòu),backend 是 Flask 實(shí)現(xiàn)的服務(wù)端,frontend 是 Vue 實(shí)現(xiàn)的前端。

.├── backend│ ├── app│ └── venv└── frontend ├── README.md ├── build ├── config ├── dist ├── index.html ├── node_modules ├── package-lock.json ├── package.json ├── src └── static再來看一下目前代碼的運(yùn)行效果:

開發(fā)環(huán)境

硬件:

軟件:

請確保已經(jīng)安裝好了node js 環(huán)境,可參考nodejs官網(wǎng)進(jìn)行安裝。

前端開發(fā)

1、安裝vue-cli

安裝 vue-cli Vue CLI 是一個基于 Vue.js 進(jìn)行快速開發(fā)的完整系統(tǒng)。

$ npm install -g vue-cli

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

新建目錄

$ mkdir word-cloud$ cd word-cloud/創(chuàng)建項(xiàng)目

$ vue init webpack frontend執(zhí)行完上面的命令后,會讓你設(shè)置項(xiàng)目的基本信息,我的配置如下:

然后等待安裝一些基本的依賴,完成之后進(jìn)入到 frontend 目錄

$ cd frontend$ npm run dev執(zhí)行完后會在控制臺提示

Your application is running here: http://localhost:8080說明我們現(xiàn)在已經(jīng)可以跑起來了,可以訪問一下http://localhost:8080,如下:

這時我們再看一下 frontend 的目錄結(jié)構(gòu),已經(jīng)默認(rèn)幫我們生成了一些目錄和代碼。

.├── README.md├── build├── config├── index.html├── node_modules├── package-lock.json├── package.json├── src└── static

3、安裝element-ui

Element 是一套為開發(fā)者、設(shè)計(jì)師和產(chǎn)品經(jīng)理準(zhǔn)備的基于 Vue 2.0 的桌面端組件庫。

$ npm i element-ui -S使用插件

在 vue-cli 幫我們生成的目錄中/src/main.js中導(dǎo)入ElementUI

import ElementUI from'element-ui'import'element-ui/lib/theme-chalk/index.css'最后使用

Vue.use(ElementUI)

4、安裝axios

因?yàn)槭乔昂蠖朔蛛x的應(yīng)用,所以還要安裝請求的庫axios。axios 是基于 promise 的 HTTP 客戶端。

$ npm install --save axios同樣在/src/main.js導(dǎo)入axios

import axios from 'axios'注冊axios

Vue.prototype.axios = axios之后我們就可以使用 axios 發(fā)送請求了。

5、編寫頁面

先找到App.vue,把我們不需要的 logo 刪掉。

<template> <div id="app"> <!-- <img src="./assets/logo.png"> --> <router-view/> </div></template>新建WordCloud.vue,這就是我們的主要頁面。一個標(biāo)題,一個輸入框,兩個按鈕。

<template> <div> <h2>小詞云</h2> <div id="word-text-area"> <el-input type="textarea" :rows="10" placeholder="請輸入內(nèi)容" v-model="textarea"> </el-input> <div id="word-img"> <el-image :src="'data:image/png;base64,'+pic" :fit="fit"> <div slot="error" class="image-slot"> <i class="el-icon-picture-outline"></i> </div> </el-image> </div> <div id="word-operation"> <el-row> <el-button type="primary" @click="onSubmit" round>生成詞云</el-button> <el-button type="success" @click="onDownload" round>下載圖片</el-button> </el-row> </div> </div> </div></template>實(shí)現(xiàn)點(diǎn)擊事件并發(fā)送請求

<script> exportdefault { name: 'wordcloud', data() { return { textarea: '', pic: "", pageTitle: 'Flask Vue Word Cloud', } }, methods: { onSubmit() { var param = { "word": this.textarea } this.axios.post("/word/cloud/generate", param).then( res => { this.pic = res.data console.log(res.data) } ).catch(res => { console.log(res.data.res) }) }, onDownload() { const imgUrl = 'data:image/png;base64,' + this.pic const a = document.createElement('a') a.href = imgUrl a.setAttribute('download', 'word-cloud') a.click() } } }</script>最后在src/router中找到index.js修改一下路由。

export default new Router({ routes: [{ path: '/', name: 'index', component: WordCloud }]})打包資源

$ npm run build執(zhí)行完成后會將資源打包到dist目錄。

至此,前端的開發(fā)工作就完成了。

后端開發(fā)

1、安裝Python3

先安裝一下Python3,這里我使用 homebrew 安裝。

brew install python3由于我之前已經(jīng)安裝過了,執(zhí)行完成之后出現(xiàn)警告,按照提示操作

Warning: python 3.7.4_1 is already installed, it's just not linked You can use brew link python to link this version.

Linking /usr/local/Cellar/python/3.7.4_1... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks再次出現(xiàn)錯誤,沒有權(quán)限

參考處理:http://stackoverflow.com/questions/2

sudo chown -R $USER:admin /usr/local再次執(zhí)行

brew link pythonLinking /usr/local/Cellar/python/3.7.4_1... 1 symlinks created錯誤解決,執(zhí)行 python3 可以正確顯示版本號。

$ python3Python 3.7.4 (default, Sep 7 2019, 18:27:02)[Clang 10.0.1 (clang-1001.0.46.4)] on darwinType "help", "copyright", "credits" or "license" for more information.

2、創(chuàng)建虛擬環(huán)境

Python 虛擬環(huán)境可以為 Python 項(xiàng)目提供獨(dú)立的運(yùn)行環(huán)境,使得不同的應(yīng)用使用不同的 Python 版本,我們使用虛擬環(huán)境開發(fā)一個 Python 應(yīng)用。

新建后端目錄

$ mkdir backend$ cd backend/創(chuàng)建虛擬環(huán)境

python3 -m venv venv激活虛擬環(huán)境

source venv/bin/activate關(guān)閉虛擬環(huán)境的命令如下

deactivate

3、安裝 flask

關(guān)于 flask 我們在文章最開始已經(jīng)介紹過。

pip install flask如果沒有報(bào)錯,那就就安裝成果了。

4、安裝詞云生成庫

wordcloud 是 python 優(yōu)秀的詞云生成庫。詞云以詞語為基本單位更加直觀的展示文本。

pip install wordcloud

4、編寫代碼

關(guān)于 flask 代碼部分參考了The Flask Mega-Tutorial教程,看完第一章就可以寫出應(yīng)用了。這里我解釋一下關(guān)鍵代碼。

__init__.py中修改python默認(rèn)html和靜態(tài)資源目錄,這個資源就是我們上面在前端開發(fā)中通過npm run build生成的資源目錄。

app = Flask(__name__, template_folder="../../frontend/dist", static_folder="../../frontend/dist/static")修改完成之后再啟動 Flask,訪問的就是 vue 的頁面了。

routes.py 里面的代碼,就是主頁面和生成詞云的接口。

# 真正調(diào)用詞云庫生成圖片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 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最后執(zhí)行flask run就可以跑起來了

當(dāng)然這是用半天時間跑起來的一個簡陋的應(yīng)用,但是具備了基本的前后端分離應(yīng)用的功能。

開始拓展內(nèi)容啦!

開始分享Java相關(guān)的知識,歡迎對Java有興趣的同學(xué)來關(guān)注我們。支持一波!

關(guān)鍵詞:漂亮,實(shí)戰(zhàn)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉