九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

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

輕松編程社 輕松編程社

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

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

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

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

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

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

先簡(jiǎn)單看一下項(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

再來(lái)看一下目前代碼的運(yùn)行效果:

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

硬件:

  • macOS Mojave 10.14.6

軟件:

  • nodejs v11.6.0

  • Python 3.7.4

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

前端開(kāi)發(fā)

1、安裝vue-cli

安裝 vue-cli Vue CLI 是一個(gè)基于 Vue.js 進(jìn)行快速開(kāi)發(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í)行完上面的命令后,會(huì)讓你設(shè)置項(xiàng)目的基本信息,我的配置如下:

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

$ cd frontend
$ npm run dev

執(zhí)行完后會(huì)在控制臺(tái)提示

Your application is running here: http://localhost:8080

說(shuō)明我們現(xiàn)在已經(jīng)可以跑起來(lái)了,可以訪問(wèn)一下http://localhost:8080,如下:

這時(shí)我們?cè)倏匆幌?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 是一套為開(kāi)發(fā)者、設(shè)計(jì)師和產(chǎn)品經(jīng)理準(zhǔn)備的基于 Vue 2.0 的桌面端組件庫(kù)。

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)用,所以還要安裝請(qǐng)求的庫(kù)axios。axios 是基于 promise 的 HTTP 客戶端。

$ npm install --save axios

同樣在/src/main.js導(dǎo)入axios

import axios from 'axios'

注冊(cè)axios

Vue.prototype.axios = axios

之后我們就可以使用 axios 發(fā)送請(qǐng)求了。

5、編寫頁(yè)面

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

<template>
  <div id="app">
    <!-- <img src="./assets/logo.png"> -->
    <router-view/>
  </div>
</template>

新建WordCloud.vue,這就是我們的主要頁(yè)面。一個(gè)標(biāo)題,一個(gè)輸入框,兩個(gè)按鈕。

<template>
    <div>
        <h2>小詞云</h2>
        <div id="word-text-area">
            <el-input type="textarea" :rows="10" placeholder="請(qǐng)輸入內(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ā)送請(qǐng)求

<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í)行完成后會(huì)將資源打包到dist目錄。

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

后端開(kāi)發(fā)

1、安裝Python3

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

brew install python3

由于我之前已經(jīng)安裝過(guò)了,執(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)錯(cuò)誤,沒(méi)有權(quán)限

sudo chown -R $USER:admin /usr/local

再次執(zhí)行

brew link python
Linking /usr/local/Cellar/python/3.7.4_1... 1 symlinks created

錯(cuò)誤解決,執(zhí)行 python3 可以正確顯示版本號(hào)。

$ python3
Python 3.7.4 (default, Sep  7 201918:27:02)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "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)境開(kāi)發(fā)一個(gè) 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 我們?cè)谖恼伦铋_(kāi)始已經(jīng)介紹過(guò)。

pip install flask

如果沒(méi)有報(bào)錯(cuò),那就就安裝成果了。

4、安裝詞云生成庫(kù)

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

pip install wordcloud

4、編寫代碼

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

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

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

修改完成之后再啟動(dòng) Flask,訪問(wèn)的就是 vue 的頁(yè)面了。

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

# 真正調(diào)用詞云庫(kù)生成圖片
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


# 主頁(yè)面
@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就可以跑起來(lái)了

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

作者:snowspace@掘金

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用 Vue.js 和 Flask 實(shí)現(xiàn)全棧單頁(yè)面應(yīng)用
成功ReferenceError: axios is not defined解決
使用Vue,Spring Boot,Flask,Django 完成Vue前后端分離開(kāi)發(fā)
手把手教你三步完成測(cè)試監(jiān)控系統(tǒng)搭建
vue 首屏優(yōu)化
python django vue搭建前后端分離項(xiàng)目
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服