0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Flask + Vue的Web 框架 Flask 开发的词云生成应用

马哥Linux运维 来源:掘金 作者:snowspace 2021-06-28 09:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,代码已上传到 flask-vue-word-cloud

项目地址:https://github.com/77Y/flask-vue-word-cloud

写这个小项目的起因是最近团队年终述职,有一些大佬的 PPT 上用了词云来展示自己团队一年的工作成果;还有大佬说不要守着自己的一亩三分地,在技术上拓宽视野可以帮助我们更好的成长

正好之前接触过 Python 和 R 生成词云,于是作为一个移动端开发者,想在本地跑一个生成词云的服务,就有了这个项目

目录结构先简单看一下项目的目录结构,backend 是 Flask 实现的服务端,frontend 是 Vue 实现的前端。

├── backend

│ ├── app

│ └── venv

└── frontend

├── README.md

├── build

├── config

├── dist

├── index.html

├── node_modules

├── package-lock.json

├── package.json

├── src

└── static

开发环境硬件:

macOS Mojave 10.14.6

软件:

nodejs v11.6.0

Python 3.7.4

请确保已经安装好了node js 环境,可参考nodejs官网进行安装。

前端开发1、安装vue-cli安装 vue-cliVue CLI 是一个基于 Vue.js 进行快速开发的完整系统。

$ npm install -g vue-cli

2、创建项目新建目录

$ mkdir word-cloud

$ cd word-cloud/

创建项目

$ vue init webpack frontend

执行完上面的命令后,会让你设置项目的基本信息,我的配置如下:

4985dc94-d79b-11eb-9e57-12bb97331649.jpg

然后等待安装一些基本的依赖,完成之后进入到 frontend 目录

$ cd frontend

$ npm run dev

执行完后会在控制台提示

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

说明我们现在已经可以跑起来了,可以访问一下http://localhost:8080

这时我们再看一下 frontend 的目录结构,已经默认帮我们生成了一些目录和代码。

├── README.md

├── build

├── config

├── index.html

├── node_modules

├── package-lock.json

├── package.json

├── src

└── static

3、安装element-uiElement 是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。

$ npm i element-ui -S

使用插件

在 vue-cli 帮我们生成的目录中/src/main.js中导入ElementUI

import ElementUI from‘element-ui’import‘element-ui/lib/theme-chalk/index.css’

最后使用

Vue.use(ElementUI)

4、安装axios因为是前后端分离的应用,所以还要安装请求的库axios。axios 是基于 promise 的 HTTP 客户端。

$ npm install --save axios

同样在/src/main.js导入axios

import axios from ‘axios’

注册axios

Vue.prototype.axios = axios

之后我们就可以使用 axios 发送请求了。

5、编写页面先找到App.vue,把我们不需要的 logo 删掉。

《template》《div id=“app”》《!-- 《img src=“。/assets/logo.png”》 --》《router-view/》《/div》《/template》

新建WordCloud.vue,这就是我们的主要页面。一个标题,一个输入框,两个按钮。

《template》《div》《h2》小词云《/h2》《div id=“word-text-area”》《el-input type=“textarea” :rows=“10” placeholder=“请输入内容” 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》

实现点击事件并发送请求

《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

执行完成后会将资源打包到dist目录。

至此,前端的开发工作就完成了。

后端开发1、安装Python3先安装一下Python3,这里我使用 homebrew 安装。

brew install python3

由于我之前已经安装过了,执行完成之后出现警告,按照提示操作

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

再次出现错误,没有权限

参考处理:stackoverflow.com/questions/2…

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

再次执行

brew link python

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

错误解决,执行 python3 可以正确显示版本号。

$ python3

Python 3.7.4 (default, Sep 7 2019, 1802)

[Clang 10.0.1 (clang-1001.0.46.4)] on darwin

Type “help”, “copyright”, “credits” or “license” for more information.

2、创建虚拟环境Python 虚拟环境可以为 Python 项目提供独立的运行环境,使得不同的应用使用不同的 Python 版本,我们使用虚拟环境开发一个 Python 应用。

新建后端目录

$ mkdir backend

$ cd backend/

创建虚拟环境

python3 -m venv venv

激活虚拟环境

source venv/bin/activate

关闭虚拟环境的命令如下

deactivate

3、安装 flask关于 flask 我们在文章最开始已经介绍过。

pip install flask

如果没有报错,那就就安装成果了。

4、安装词云生成库wordcloud 是 python 优秀的词云生成库。词云以词语为基本单位更加直观的展示文本。

pip install wordcloud

4、编写代码关于 flask 代码部分参考了The Flask Mega-Tutorial教程,看完第一章就可以写出应用了。这里我解释一下关键代码。

在__init__.py中修改python默认html和静态资源目录,这个资源就是我们上面在前端开发中通过npm run build生成的资源目录。

app = Flask(__name__,

template_folder=“。。/。。/frontend/dist”,

static_folder=“。。/。。/frontend/dist/static”)

修改完成之后再启动 Flask,访问的就是 vue 的页面了。

routes.py 里面的代码,就是主页面和生成词云的接口

# 真正调用词云库生成图片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

最后执行flask run就可以跑起来了

当然这是用半天时间跑起来的一个简陋的应用,但是具备了基本的前后端分离应用的功能

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1309

    浏览量

    74952
  • python
    +关注

    关注

    58

    文章

    4884

    浏览量

    90300
  • vue
    vue
    +关注

    关注

    0

    文章

    59

    浏览量

    8749

原文标题:实战:Flask + Vue 生成漂亮的词云

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FBX/glTF 模型渲染与动画技术解析 | 图扑 HT 框架

    Web 3D 渲染框架, 为 FBX/glTF 模型的骨骼动画、材质切换及自定义 Shader 开发提供完善支持 ,可大幅降低开发门槛,提升 3D 应用的
    的头像 发表于 04-21 11:31 14次阅读
    FBX/glTF 模型渲染与动画技术解析 | 图扑 HT <b class='flag-5'>框架</b>

    Vue3 + React18 + TS4入门到实战 系统学习3大热门技术 | 更新完结

    ,避免运行时异常。特别是在跨框架组件开发中,通过共享类型定义和条件类型工具,可以实现Vue和React组件间的类型安全复用,大幅减少手动维护成本。TypeScript4还支持更精确的类型推断和更严格
    发表于 03-30 15:18

    【飞凌嵌入式RV1126B开发板试用体验】+ 5. YOLOv8目标识别部署

    。 main_camera_fps_v8.py中是将图像在本地屏幕显示,这里只有开发板和摄像头没有屏幕,修改代码将图像在电脑浏览器显示,需要执行pip install flask命令安装web
    发表于 03-23 20:19

    如何使用SpringBoot、Vue2.0、MySQL开发一套诊所系统?

    ​ 如何使用Java语言;前端框架Vue2.0;后端框架:SpringBoot;数 据 库: MySQL 这些技术开发一套诊所系统? 技
    的头像 发表于 11-27 16:02 397次阅读
    如何使用SpringBoot、<b class='flag-5'>Vue</b>2.0、MySQL<b class='flag-5'>开发</b>一套<b class='flag-5'>云</b>诊所系统?

    咸鱼平台商品关键字搜索API接口设计与实现

    ​ 一、接口设计规范 请求方式 :GET请求 URL路径 :/api/search 请求参数 : keyword:搜索关键(必填) page:页码(默认1) page_size:每页数量(默认20
    的头像 发表于 11-19 15:32 391次阅读
    咸鱼平台商品关键字搜索API接口设计与实现

    一款基于Java+Spring Boot+Vue的智慧随访管理系统源码

    系统系统主要包含 随访管理 和 系统管理 两大模块: 随访管理包括三级随访体系(出院/门诊随访)、智慧库(表单配置)、满意度调查系统; 系统管理提供用户权限、字典参数等基础配置及代码生成工具。该系统支持二次开发,提供包括随访路
    的头像 发表于 11-13 15:38 505次阅读
    一款基于Java+Spring Boot+<b class='flag-5'>Vue</b>的智慧随访管理系统源码

    医院随访管理系统源码,三级随访系统源码,Java+Springboot,Vue,Ant-Design+MySQL5

    Java版随访系统源码,医院随访管理系统源码,三级随访系统源码,B/S前后端分离架构,自主版权,落地案例。 技术框架:Java+Springboot,Vue,Ant-Design+MySQL5 开发
    的头像 发表于 11-08 14:48 724次阅读
    医院随访管理系统源码,三级随访系统源码,Java+Springboot,<b class='flag-5'>Vue</b>,Ant-Design+MySQL5

    订单实时状态查询接口技术实现

    、可靠的订单实时状态查询接口,涵盖接口设计、技术选型、代码实现和性能优化。我们将使用Python和Flask框架作为示例,确保内容真实可靠,适合开发人员参考。 1. 接口设计原则 订单实时状态查询接口需要满足以下要求: 实时性
    的头像 发表于 10-21 17:58 870次阅读
    订单实时状态查询接口技术实现

    Vue3组合式API最佳实践:从Options API到Composition API

    简介 在Vue.js中,Options API一直是主流的开发方式。不过随着Vue3的推出,Composition API作为一种全新的开发方式引起了广泛关注。本文将从Options
    的头像 发表于 10-20 13:36 843次阅读

    如何快速在服务器上部署Web环境?

    如何快速在服务器上部署Web环境
    的头像 发表于 10-14 14:16 848次阅读

    商品图片批量上传接口设计与实现

    设计、实现步骤、代码示例、错误处理和性能优化。文章基于Python Flask框架,确保内容真实可靠,适合开发者快速上手。 1. 接口设计概述 一个标准的商品图片批量上传接口应遵循RESTful原则,使用HTTP POST方法。
    的头像 发表于 10-13 15:25 558次阅读

    中国信通院发布“2025计算十大关键

    日前,中国信通院正式发布“2025计算十大关键”,中国信通院计算与大数据研究所所长何宝宏对“2025计算十大关键”进行了解读。十大
    的头像 发表于 07-30 10:53 3338次阅读
    中国信通院发布“2025<b class='flag-5'>云</b>计算十大关键<b class='flag-5'>词</b>”

    【VisionFive 2单板计算机试用体验】安装openplc

    官网看到开发板可以安装测试openplc,下面来体验下openplc功能。 一、安装软件 1.1、安装软件包 root@starfive:~# sudo apt-get install -y
    发表于 07-15 23:30

    Dify携手亚马逊科技加速全球企业生成式AI应用规模化落地

    简单易用的AI应用开发平台Dify通过深度集成亚马逊科技的生成式AI技术与服务,在保障性能、合规与全球交付的基础上,显著降低企业在生成
    的头像 发表于 06-07 16:00 1011次阅读

    HarmonyOS5服务技术分享--ArkTS开发Node环境

    ✨ 你好呀,开发者小伙伴们!今天我们来聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩转函数,特别是结合Node.js和HTTP触发器的开发技巧。文章会手把手带你从零开始,用最接地
    发表于 05-22 17:21