前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python的Web框架Flask + Vue 生成漂亮的词云

Python的Web框架Flask + Vue 生成漂亮的词云

作者头像
朱小五
发布于 2020-03-02 05:46:47
发布于 2020-03-02 05:46:47
4K00
代码可运行
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据
运行总次数:0
代码可运行

作者:snowspace@掘金

前言

这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,代码已上传到 flask-vue-word-cloud。写这个小项目的起因是最近团队年终述职,有一些大佬的 PPT 上用了词云来展示自己团队一年的工作成果。还有大佬说不要守着自己的一亩三分地,在技术上拓宽视野可以帮助我们更好的成长。正好之前接触过 Python 和 R 生成词云,于是作为一个移动端开发者,想在本地跑一个生成词云的服务,就有了这个项目。

目录结构

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── 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 进行快速开发的完整系统。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install -g vue-cli
2、创建项目

新建目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir word-cloud
$ cd word-cloud/

创建项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ vue init webpack frontend

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd frontend
$ npm run dev

执行完后会在控制台提示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Your application is running here: http://localhost:8080

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── README.md
├── build
├── config
├── index.html
├── node_modules
├── package-lock.json
├── package.json
├── src
└── static
3、安装element-ui

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm i element-ui -S

使用插件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

最后使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.use(ElementUI)
4、安装axios

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install --save axios

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import axios from 'axios'

注册axios

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.prototype.axios = axios

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

5、编写页面

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div id="app">
    <!-- <img src="./assets/logo.png"> -->
    <router-view/>
  </div>
</template>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

实现点击事件并发送请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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修改一下路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default new Router({
  routes: [{
    path: '/',
    name: 'index',
    component: WordCloud
  }]
})

打包资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm run build

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

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

后端开发

1、安装Python3

由于 mac 系统自带的 Python 版本是 2.7,先安装一下Python3,这里我使用 homebrew 安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew install python3

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Linking /usr/local/Cellar/python/3.7.4_1... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

再次出现错误,没有权限

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo chown -R $USER:admin /usr/local

再次执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew link python
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Linking /usr/local/Cellar/python/3.7.4_1... 1 symlinks created

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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 应用。

新建后端目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir backend
$ cd backend/

创建虚拟环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m venv venv

激活虚拟环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source venv/bin/activate

关闭虚拟环境的命令如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deactivate
3、安装 flask

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install flask

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

4、安装词云生成库

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install wordcloud
4、编写代码

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app = Flask(__name__,
            template_folder="../../frontend/dist",
            static_folder="../../frontend/dist/static")

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 真正调用词云库生成图片
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就可以跑起来了。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python Web实战:Flask + Vue 开发一个漂亮的词云网站
今天就分享一个用Flask做的词云生成网站,非常有意思的小web,适合练手。这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,代码已上传到 flask-vue-word-cloud
龙哥
2021/12/09
1.1K0
Python Web实战:Flask + Vue 开发一个漂亮的词云网站
Vue + Flask 实战开发系列(一)
我写东西喜欢写系列,系列输出可以让掌握的知识更加牢固和系统化。系统化、结构化的知识,可以让我们的大脑记忆的更好。这个系列主要使用Vue和Flask来完成一个前后端分离的图书管理应用。
TalkPython
2020/06/07
11.1K0
flask搭建一个前后端分离的系统
我们通常说三端,pc端,android端和ios端。如果前后端不分离,相当是要做三套系统。如果前后端分离的话,可以共用一个后端,前端各自做自己的,不用管后端。
赵云龙龙
2020/03/26
2.7K0
flask搭建一个前后端分离的系统
Vue + Flask 实现单页面应用
说明我们的前端代码构建成功。 现在我们在浏览器中打开上面的地址,就可以得到页面如下:
周萝卜
2019/07/17
2.3K0
Vue + Flask 实现单页面应用
使用 Vue.js 和 Flask 实现全栈单页面应用
在本教程中,我将向大家展示如何使用前端的 Vue.js 单页面应用和后端的 Flask 进行交互。
疯狂的技术宅
2019/03/27
2.7K0
使用 Vue.js 和 Flask 实现全栈单页面应用
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
写这篇文章的初衷并不是要大家真的不用node和vscode,说实话前端发展成今天这样,在实际开发中确实离不开node和vscode这类工具了,但往往工具用多了我们自己也成了一个工具人!
人人都是码农
2025/01/20
1500
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
使用Vue完成前后端分离开发Spring,Django,Flask(一)
本篇题为 使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发 将通过一个项目整合(一前端项目对应三个后端项目),完成一个简单的DEMO
双鬼带单
2018/07/12
2.5K0
使用Vue完成前后端分离开发Spring,Django,Flask(一)
Vue实现登录功能
代码地址:https://github.com/Snowstorm0/vue-login-mock
代码的路
2022/08/23
6950
Vue实现登录功能
Vue 基于node npm & vue-cli & element UI创建vue单页应用
基于node npm & vue-cli & element UI创建vue单页应用
授客
2019/12/26
9290
Vue 基于node npm & vue-cli & element UI创建vue单页应用
用 Vue 和 Django 快速搭建前后端分离项目
Web 开发中前后端分离已经是常规性做法,但是不少初学者不太熟悉如何前后端分离,搭建 Demo 的时候遇到的问题也比较多,今天就来分享一下如何用 Vue 和 Django 快速搭建前后端分离项目。
somenzz
2022/10/25
4.9K0
用 Vue 和 Django 快速搭建前后端分离项目
教你玩转Vue和Django的前后端分离
今天中秋节,先祝大家节日愉快,不在父母身边的都打个电话关心一下吧,我们最容易忽略的人恰恰是最爱我们的父母。
somenzz
2020/11/25
3K0
教你玩转Vue和Django的前后端分离
前端成神之路-vue前端项目01
客户使用的业务服务:PC端,小程序,移动web,移动app 管理员使用的业务服务:PC后台管理端。 PC后台管理端的功能:管理用户账号(登录,退出,用户管理,权限管理),商品管理(商品分类,分类参数,商品信息,订单),数据统计 电商后台管理系统采用前后端分离的开发模式 前端项目是基于Vue的SPA(单页应用程序)项目
海仔
2021/03/20
7020
使用vue-cli创建项目登陆页面
打开 src目录下的main.js,该文件是项目的入口文件,所以在这里导入,其他组件均可使用,不用再导入。
用户10196776
2022/11/22
1.2K0
使用vue-cli创建项目登陆页面
vue2.x 5分钟上手
v-bind指令用于设置HTML属性:v-bind:href 缩写为 :href
tanoak
2019/02/22
5140
vue2.x 5分钟上手
Vue + Flask 实战开发系列(八)
登录和退出功能做完以后,接下来继续开发作者信息相关功能,例如作者列表,添加、删除、更新等功能。开发之前,先要清理一下vue-admin-template模板默认生成的路由信息。之后,我们从作者列表功能开始开发。
TalkPython
2020/07/15
2.1K0
Vue + Flask 实战开发系列(八)
4.新建vue项目newpc
在想要存放项目的目录下,按住shift键+鼠标右键,选择【在此处打开命令窗口】,打开cmd命令行窗口
玩蛇的胖纸
2020/06/12
4830
FastAPI:快速开发一个文本转语音的接口
Python Web 开发方面有一个很重要的环节就是开发接口,开发接口性能最好的工具就是闪电侠 FastAPI[1],正如它的名字一样,是非常快的 API。当然,还有一些 REST API 框架,如 Django REST Framework,Flask-RESTful 等,如果以性能为首要考虑因素,那毫无疑问选择 FastAPI。
somenzz
2021/08/19
1.5K0
vue+flask实现视频合成(拖拽上传)
欢迎访问博客代码哈士奇 技术 聊天 交流群 974178910 前端交流群 535620886
代码哈士奇
2021/10/25
1.2K0
vue+flask实现视频合成(拖拽上传)
使用 Flask 和 Vue.js 来构建全栈单页应用
在这个教程中,我将向你展示如何将 Vue 的单页面应用和 Flask 后端连接起来。
Python编程与实战
2019/12/05
3.2K0
使用 Flask 和 Vue.js 来构建全栈单页应用
全栈的自我修养: 001环境搭建 (使用Vue,Spring Boot,Flask 完成Vue前后端分离开发)
本系列文章将从一个完整的项目是如何开发的过程进行编写,期间会涉及前端、后端和一些运维的知识。
双鬼带单
2020/06/28
1.3K0
全栈的自我修养: 001环境搭建 (使用Vue,Spring Boot,Flask 完成Vue前后端分离开发)
相关推荐
Python Web实战:Flask + Vue 开发一个漂亮的词云网站
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档