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

轻松编程社 轻松编程社

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.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

再次出现错误,没有权限

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

再次执行

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

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

$ python3Python 3.7.4 (default, Sep  7 2019, 18:27:02)[Clang 10.0.1 (clang-1001.0.46.4)] on darwinType "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就可以跑起来了

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

作者:snowspace@掘金

(0)

相关推荐

  • .net core3.1 webapi + vue.js + axios实现跨域

    我所要讲述的是,基于.net core3.1环境下的webapi项目,如何去使用axios对接前端的vue项目 既然谈到axios,这里贴出axios的官方文档地址: http://www.axios ...

  • 什么是Flask框架?有什么特点?

    对Python知识稍有了解的人应该都知道Python有很多框架,其中包含Flask.Django等,今天小编就带大家一起来了解一下Flask框架. Flask是一个使用Python编写的轻量级Web应 ...

  • 我自己是码农,我想要制作一个管理系统,但是不想再雇程序员,有什么好的工具吗?

    首先不知道您会用什么语言,不过对一个3.5年的码农来说,语言不是问题,我这里推荐几个开发包给你,看看有没有用处: 1.若依管理系统 RuoYi 若依是一款基于SpringBoot的后台管理系统的基础开 ...

  • 使用Python做网站真是太简单了!朋友...

    使用Python做网站真是太简单了!朋友让做个简易版的电商网站,于是晚上从国外网站下载了免费页面模板,确定好整体功能流程后,使用Flask jinja2,完成了网站整体的功能开发,我们两个小伙伴只用了 ...

  • vue 首屏优化

    首屏优化主要思想是通过 分包加载,减少 app.js 的体积来达到 快速加载的目的,本文主要采用 webpack 的 externals 配合 cdn 实现的首屏优化 1. 配置 webpack co ...

  • Python可以开发网页吗?有什么作用?

    在很多人的印象中,Python是无所不能的,那么Python可以开发网页吗?有什么好用的框架呢?我们一起来看看吧. Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于19 ...

  • Django和Flask框架区别?Python学习

    学习Python的过程中,Django框架和Flask框架是比较常见的,各具有非常优异的表现,因此很多人就会问Django和Flask框架有什么区别?该如何选择?我们来看看吧. Django和Flas ...

  • Vue中Axios如何封装管理?本文详解

    Vue Axios 封装 定义 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 支持Promise API 拦截请求和响应 转换请求数据和响应数 ...

  • 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    WEB前端开发社区 昨天 Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框 ...

  • Flask Session 网站用户登录,Python Web 开发小白进阶关键

    Flask Session 网站用户登录,Python Web 开发小白进阶关键

  • Python Web开发哪些模块好用?这几类必知!

    关于Python Web开发和图形用户界面的模块有哪些?今天小编通过这篇文章为大家整理了一些常用的模块,我们一起来看看吧. Web开发: 1. Requests:Python内置模块(urllib和u ...

  • Python Web开发有哪些框架?五大框架

    想必很多人都知道Python语言,Python是一门非常不错的编程语言,在爬虫.数据分析.人工智能领域有着非常不错的作用,初次之外,我们熟知的web开发也是Python的应用领域之一,那么你知道Pyt ...

  • Python web开发需要掌握哪些基础?Python入门!

    在大家的印象中,Python被广泛的应用在人工智能.自动化运维.自动化测试.机器学习等方向,并且有着不可或缺的作用;但其实Python的应用领域不止这些,Python还可以进行后台开发,正因如此市场上 ...

  • Python Web开发需要哪些知识?

    学完Python之后,可以从事很多岗位,其中就包含Web开发,那么学Python从事Web开发需要学什么呢?这些知识你必须知道. 第一:HTML. HTML是网页的核心,学好HTML是成为web开发人 ...

  • vue 开发常用工具及配置四:推荐一个 mock 工具

    本文大约 1000 字. 在系统原型设计阶段,或后端接口不足备的情况下,如何验证模型信息的完整性?此时 mock 是一个不错的选择. 一般开发者可能倾向于直接写后端接口,哪怕只是返回假数据.之前作者也 ...

  • 第 58 天:Python Web开发 Django 简介

    今天来为大家介绍 Python 另一个 Web 开发框架 Django,它是一个基于 Python 定制的开源 Web 应用框架,最早源于一个在线新闻 Web 网站,后于2005年开源.Django ...

  • 第 87 天:Python Web开发 OAuth2.0 简介

    随着互联网的发展,各种应用相互交叉,到处需要用户登录,信息安全成为了不可回避的问题,应用需要扩展,用户需要更好的体验,信息需要更安全的保障,为了满足这些需求,互联网技术不断推陈出新,从通信安全,到各种 ...