实战:Flask + Vue 生成漂亮的词云

Flask+VUE 实现页面增删改查显示开发+测试(图文教程附源码) 环境搭建博文: Flask+mysql接口增删改查博文: 本篇文章接着上面的图书项目book增删改查实现 vue 创建新项目 :vue create book 初始化 :vue init webpack book 中间要是提示要安装脚手架,按照提示执行命令即可 新建项目成功后,目录结构如下: ... 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

作者:snowspace@掘金

前言

这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,代码已上传到 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-cli Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。

$ npm install -g vue-cli
2、创建项目

新建目录

$ mkdir word-cloud
$ cd word-cloud/

创建项目

$ vue init webpack frontend

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

然后等待安装一些基本的依赖,完成之后进入到 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-ui

Element 是一套为开发者、设计师和产品经理准备的基于 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>
    export default {
        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

由于 mac 系统自带的 Python 版本是 2.7,先安装一下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, 18:27:02)
[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就可以跑起来了。

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

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

题图:pexels,CC0 授权。

好文章,我在看❤️

光耦CTR参数实战:如何避免误触发与功耗陷阱(附计算公式) 本文深入解析光耦CTR参数在电路设计中的关键作用,探讨如何平衡误触发风险与功耗表现。通过TLP521、PC817等常见型号的实测数据对比,提供不同工作状态下的选型策略和计算公式,帮助工程师优化设计,提升系统稳定性和能效。 阅读详情

相关推荐

PID参数自整定实战解析:从继电反馈到智能调节的完整实现

本文深入解析PID参数自整定的实战应用,从继电反馈原理到智能调节算法的完整实现。通过详细讲解振荡波形特征提取、参数计算的工程化改进及工业场景调试技巧,帮助工程师快速掌握PID自整定技术,提升控制系统性能。特别针对嵌入式系统优化和噪声环境下的稳定策略提供了实用解决方案。

weixin_28731223的博客 439

VUE图效果

Vue中创建图效果可以使用一些第三方库来实现。库创建图效果,你可以根据具体需求自定义汇和权重,并使用。提供的配置选项进行进一步的样式和布局调整。这样,当Vue组件被挂载后,图就会在。注意:上述示例仅展示了如何使用。

a_靖的博客 6339

i2c-hid_standalone.zip

r7000在linux下触摸板异常补丁,需要自己编译。先安装linux-headers,然后make生成i2c-hid.ko文件,将此文件替换到系统中原有文件:sudo cp i2c-hid.ko /lib/modules/5.9.0-1-MANJARO/kernel/drivers/hid/i2c-hid/i2c-hid.ko.xzsudo depmod然后修改grub,在GRUB_CMDLINE_LINUX_DEFAULT的最后加上i2c-hid.polling_mode=1,重新生成grub文件,重启

vue 绘制图效果

最近接到一个需求:绘制类似图的效果,效果图如下: 尝试了很多方式,最后选择用echart的wordCloud。 代码如下: html: <div ref="keyWords"></div> js: initCharts () { let myChart = this.$echarts.init(this.$refs.keyWords) console.log(this.$refs.chart) myChart.setOption({ series: [{

funny_girl的博客 1664

Google Maps Services JS高程与时区API:精准位置服务的完整指南

Google Maps Services JS是一款功能强大的Node.js客户端库,专为Google Maps API Web Services打造。本教程将带你深入探索如何利用其高程和时区API,轻松获取全球任意地点的海拔高度和精确时区信息,为你的位置感知应用注入核心动力。 ## 🌍 快速上手:环境搭建与安装 要开始使用Google Maps Services JS,首先需要克隆项目仓库

gitblog_00937的博客 667

Vue中的数据可视化展示与生成

在本文中,我们介绍了如何在Vue中使用库进行数据可视化展示和生成。我们首先介绍了的基本概念,然后介绍了如何准备数据和渲染。最后,我们还介绍了如何使用生成库来生成图。希望本文对你。

徐师兄的博客 3686

flask+vue全栈部署方式

新公司项目技术栈用的falsk+vue,在这里记录一下部署方式,以备以后回顾。 我这边的是用systemctl+nginx+gunicorn+virtualenv的架构进行部署的。大概介绍一下,systemctl是一个后台进程管理的工具,nginx是进行反向代理的工具,gunicorn是一个 Python 的高性能 WSGI HTTP 服务器。 ps:上面的介绍也只是简介,详细资料可自查。这种时候,我总会想起来我初中历史老师说了“中国开始沦为半殖民地半封建社会”后,却从不解释什么是“殖民地”而我又不懂却只是

菜鸟的博客 2万+

vue项目中使用_实战Flask + Vue 生成漂亮

原标题:实战Flask + Vue 生成漂亮 作者:snowspace@掘金前言这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的生成应用,代码已上传到 flask-vue-word-cloud。写这个小项目的起因是最近团队年终述职,有一些大佬的 PPT 上用了来展示自己团队一年的工作成果。还有大佬说不要守着自己的一亩三分地,在技术上拓宽视野可以帮助...

weixin_39819393的博客 753

flask html 得到文本框 input的内容_实战Flask + Vue 生成漂亮

(点击上方快速关注并设置为星标,一起学Python)作者:snowspace@掘金前言这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的生成应用,代码已上传到 flask-vue-word-cloud。写这个小项目的起因是最近团队年终述职,有一些大佬的 PPT 上用了来展示自己团队一年的工作成果。还有大佬说不要守着自己的一亩三分地,在技术上拓宽视野...

weixin_39968995的博客 1046

Python Web实战Flask + Vue 开发一个漂亮网站

作者:snowspace@掘金前言大家好,我是菜鸟哥!Python里面两大最牛的Web框架,一个是Django,一个是Flask 。今天就分享一个用Flask做的生成网站,非常有意思的...

cainiao_python的博客 1399

FLASK+VUE--前后端分离(一)- Flask基础讲解之路由、视图函数----注册登录代码实现

一、Flask简易介绍 1、Flask是目前十分流行的web框架,它是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。 2、微框架中的“微”是指Flask旨在保持代码简洁且易于扩展。 3、框架的简易理解及区别: 目前Python的web框架有很多。除了Flask,还有django等等 django是目前Python的框架中使用度最高的,但是Django如同java大多数被用于大型网站的开发。 Flask但对于大多数的小型网站的开发Flask就可以满足,和其他

万物皆有灵 2万+

基于Flask框架和Vue框架搭建一个Web端的深度学习检测系统(从模型训练,界面设计到服务器部署实现一个完整项目实战

回顾一下本项目的完整实现步骤:1.配置相应训练环境,安装必要的安装包以及npm;2.整理草莓叶子、花朵、果实数据集,以及无人机拍摄的数据集,进行人工标注;3.采用YOLO网络训练模型(可以选择任意版本的网络结构,但是需要在本代码中进行相应更改);4.模型训练完成在后端加载,所有检测识别结果在后端检测完成,然后上传到前端(前端界面也可以进行任意的设计);最后有需要完完整代码和数据集,可以加微信号wxid_cn1zsaudo0pn22付费获取,也可以一起交流。

hutao1030813002的博客 7722

VueFlask 前后端分离教程(一)

在本教程中,我们将学习如何使用 Vue.js(前端框架)和 Flask(后端框架)构建一个简单的前后端分离应用。本教程假设你对 HTML、CSS 和 JavaScript 有基本了解。让我们开始吧!

qq_41399144的博客 6363

python使用 flask+vue 制作前后端分离图书信息管理系统

哈喽兄弟们,今天咱们来用Python实现一个前后端分离的图书信息管理系统

轻松学python的博客 4604

FlaskFlask+VUE3.0前后端分离项目

以上代码展示了如何使用Flask和PostgreSQL实现一个简单的用户登录功能,包括用户注册、登录、生成JWT token以及记录登录信息。你可以根据需要进一步扩展和优化代码,例如添加密码哈希、错误处理、日志记录等功能。

tttzzzqqq2018的博客 3118
上一篇: 一篇文章理解 Python 异步编程
下一篇: 产品经理临时给程序员加需求会怎么样?答案笑喷,哈哈哈
codingpy
博客等级 码龄1天 1745粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值