作者:snowspace@掘金

前言

大家好,我是菜鸟哥!Python里面两大最牛的Web框架,一个是Django,一个是Flask 。今天就分享一个用Flask做的词云生成网站,非常有意思的小web,适合练手。

这是一个前端用 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-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>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.dataconsole.log(res.data)}).catch(res => {console.log(res.data.res)})},onDownload() {const imgUrl = 'data:image/png;base64,' + this.picconst a = document.createElement('a')a.href = imgUrla.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, 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就可以跑起来了

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

菜鸟学Python团队开始拓展内容啦!

开始分享Java相关的知识,欢迎对Java有兴趣的同学来关注我们。支持一波!

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径

量化: 定投基金到底能赚多少钱?  | 我用Python对去年800只基金的数据分析

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析|   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记灯谜答题王 |用Python做个海量小姐姐素描图碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

  • 1).卧槽!Pdf转Word用Python轻松搞定!

  • 2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃

  • 3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密

  • 4).80行代码!用Python做一个哆来A梦分身

  • 5).你必须掌握的20个python代码,短小精悍,用处无穷

  • 6).30个Python奇淫技巧集

  • 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货

  • 8).再见Python!我要学Go了!2500字深度分析

  • 9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片

点阅读原文,看Python全套!

Python Web实战:Flask + Vue 开发一个漂亮的词云网站相关推荐

  1. 师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程

    师傅带徒弟学:Python Web之Flask框架-317人已学习 课程介绍         Python Web是Python语言一个重要的应用方面,Python Web有很多,其中Flask和Dj ...

  2. 通过python各种开源库,开发一个适合大部分公司测试项目框架,确定名字AutoTestProjects

    通过python各种开源库,开发一个适合大部分公司测试项目框架,确定名字AutoTestProjects 一,简介 1.目前市场上的框架一般都需要码农进行编写,对测试小白非常的不友好,而且现在整个IT ...

  3. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  4. go build 无文件_Go之Gin+Vue开发一个线上外卖应用

    我们将开始使用Gin框架开发一个api项目,我们起名为:云餐厅.如同饿了么,美团外卖等生活服务类应用一样,云餐厅是一个线上的外卖应用,应用的用户可以在线浏览商家,商品并下单. 该项目分为客户端和服务端 ...

  5. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

  6. [vue] 使用vue开发一个todo小应用,谈下你的思路

    [vue] 使用vue开发一个todo小应用,谈下你的思路 结构: 输入部分( input )和输出部分( ul ) 逻辑:用户输入之后,通过事件触发拿到用户输入的数据存起来, 将用户数据集合通过 v ...

  7. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  8. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  9. Vue 开发一个简略版的飞机大战小游戏

    文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...

最新文章

  1. Spark 与MapReduce 资源调度方面的简单对比
  2. Flink Forward Asia 2021 正式启动!议题火热征集中!
  3. hive 小文件数据合并
  4. 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(一)
  5. 高级GIT教程-如何使用GIT调试代码?
  6. 读源代码学Asp.net Ajax(一)
  7. 拓端tecdat|R语言向量自回归VAR的迭代多元预测估计 GDP 增长率时间序列
  8. 富士康跳楼事件续集,主管扬言现场把人处理掉,并表示拒不处理善后
  9. win32com excel转pdf
  10. 2021最新抽奖网站源码
  11. 计算机如何删除用户密码,怎么清除电脑开机密码
  12. C语言枚举进程,实现一个简单的内存补丁
  13. python 四象限图_Tableau技巧|制作四象限图
  14. sails mysql_sails-mysql架构数据类型
  15. pytorch 移植到Android平台(一)
  16. 小波变换之尺度函数和小波函数
  17. 软件服务与汽车修理技术
  18. linux lamp 搭建,LInux-Lamp搭建
  19. Historic Exhibition 贪心
  20. 动态路由器(2)链路状态路由协议:OSPF第一部分

热门文章

  1. 请将文件MP_verify_xxxxxx.txt上传至填写域名或路径指向的web服务器(或虚拟主机)的目录 已解决
  2. 冒险岛唐云的料理讲座
  3. 如何用Excel做一个战斗模拟器(二)属性表
  4. Nginx优化之防盗链
  5. 只字没有,网络小说就一标题能卖810万
  6. 【BZOJ3309】DZY Loves Math 解题报告
  7. jquery中的switch用法及注意问题
  8. 【Renesas RA6M4开发板之I2C(模拟)驱动ssd1306 OLED屏幕】
  9. php手机号码隐藏,php如何隐藏手机号
  10. pcb过孔漏铜_PCB板孔无铜的缺陷及原因分析