• vue初始化


    https://mp.weixin.qq.com/s/BocSJDzJJeTWx33L1LNhGg

    学习官网https://cn.vuejs.org/v2/guide/instance.html

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

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

    目录结构

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

    1.  
      .
    2.  
      ├── backend
    3.  
      │   ├── app
    4.  
      │   └── venv
    5.  
      └── frontend
    6.  
      ├── README.md
    7.  
      ├── build
    8.  
      ├── config
    9.  
      ├── dist
    10.  
      ├── index.html
    11.  
      ├── node_modules
    12.  
      ├── package-lock.json
    13.  
      ├── package.json
    14.  
      ├── src
    15.  
      └── 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、创建项目

    新建目录

    1.  
      $ mkdir word-cloud
    2.  
      $ cd word-cloud/

    创建项目

    $ vue init webpack frontend
    

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

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

    1.  
      $ cd frontend
    2.  
      $ npm run dev

    执行完后会在控制台提示

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

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

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

    1.  
      .
    2.  
      ├── README.md
    3.  
      ├── build
    4.  
      ├── config
    5.  
      ├── index.html
    6.  
      ├── node_modules
    7.  
      ├── package-lock.json
    8.  
      ├── package.json
    9.  
      ├── src
    10.  
      └── static

    3、安装ELEMENT-UI

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

    $ npm i element-ui -S
    

    使用插件

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

    1.  
      import ElementUI from 'element-ui'
    2.  
      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 删掉。

    1.  
      <template>
    2.  
      <div id="app">
    3.  
      <!-- <img src="./assets/logo.png"> -->
    4.  
      <router-view/>
    5.  
      </div>
    6.  
      </template>

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

    1.  
      <template>
    2.  
      <div>
    3.  
      <h2>小词云</h2>
    4.  
      <div id="word-text-area">
    5.  
      <el-input type="textarea" :rows="10" placeholder="请输入内容" v-model="textarea">
    6.  
      </el-input>
    7.  
      <div id="word-img">
    8.  
      <el-image :src="'data:image/png;base64,'+pic" :fit="fit">
    9.  
      <div slot="error" class="image-slot">
    10.  
      <i class="el-icon-picture-outline"></i>
    11.  
      </div>
    12.  
      </el-image>
    13.  
      </div>
    14.  
      <div id="word-operation">
    15.  
      <el-row>
    16.  
      <el-button type="primary" @click="onSubmit" round>生成词云</el-button>
    17.  
      <el-button type="success" @click="onDownload" round>下载图片</el-button>
    18.  
      </el-row>
    19.  
      </div>
    20.  
      </div>
    21.  
      </div>
    22.  
      </template>

    实现点击事件并发送请求

    1.  
      <script>
    2.  
      export default {
    3.  
      name: 'wordcloud',
    4.  
      data() {
    5.  
      return {
    6.  
      textarea: '',
    7.  
      pic: "",
    8.  
      pageTitle: 'Flask Vue Word Cloud',
    9.  
      }
    10.  
      },
    11.  
      methods: {
    12.  
      onSubmit() {
    13.  
      var param = {
    14.  
      "word": this.textarea
    15.  
      }
    16.  
      this.axios.post("/word/cloud/generate", param).then(
    17.  
      res => {
    18.  
      this.pic = res.data
    19.  
      console.log(res.data)
    20.  
      }
    21.  
      ).catch(res => {
    22.  
      console.log(res.data.res)
    23.  
      })
    24.  
      },
    25.  
      onDownload() {
    26.  
      const imgUrl = 'data:image/png;base64,' + this.pic
    27.  
      const a = document.createElement('a')
    28.  
      a.href = imgUrl
    29.  
      a.setAttribute('download', 'word-cloud')
    30.  
      a.click()
    31.  
      }
    32.  
      }
    33.  
      }
    34.  
      </script>
    35.  
       

    最后在src/router中找到index.js修改一下路由。

    1.  
      export default new Router({
    2.  
      routes: [{
    3.  
      path: '/',
    4.  
      name: 'index',
    5.  
      component: WordCloud
    6.  
      }]
    7.  
      })
    8.  
       

    打包资源

    $ 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 可以正确显示版本号。

    1.  
      $ python3
    2.  
      Python 3.7.4 (default, Sep 7 2019, 18:27:02)
    3.  
      [Clang 10.0.1 (clang-1001.0.46.4)] on darwin
    4.  
      Type "help", "copyright", "credits" or "license" for more information.

    2、创建虚拟环境

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

    新建后端目录

    1.  
      $ mkdir backend
    2.  
      $ 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生成的资源目录。

    1.  
      app = Flask(__name__,
    2.  
      template_folder="../../frontend/dist",
    3.  
      static_folder="../../frontend/dist/static")

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

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

    1.  
      # 真正调用词云库生成图片
    2.  
      def get_word_cloud(text):
    3.  
      # font = "./SimHei.ttf"
    4.  
      # pil_img = WordCloud(width=500, height=500, font_path=font).generate(text=text).to_image()
    5.  
       
    6.  
      pil_img = WordCloud(width=800, height=300, background_color="white").generate(text=text).to_image()
    7.  
      img = io.BytesIO()
    8.  
      pil_img.save(img, "PNG")
    9.  
      img.seek(0)
    10.  
      img_base64 = base64.b64encode(img.getvalue()).decode()
    11.  
      return img_base64
    12.  
       
    13.  
       
    14.  
      # 主页面
    15.  
      @app.route('/')
    16.  
      @app.route('/index')
    17.  
      def index():
    18.  
      return render_template('index.html')
    19.  
       
    20.  
       
    21.  
      # 生成词云图片接口,以base64格式返回
    22.  
      @app.route('/word/cloud/generate', methods=["POST"])
    23.  
      def cloud():
    24.  
      text = request.json.get("word")
    25.  
      res = get_word_cloud(text)
    26.  
      return res

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

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

  • 相关阅读:
    Android手势锁实现
    网页模板pug基本语法
    React入门看这篇就够了
    我曾站在离你最近的天涯
    一文看懂浏览器事件循环
    Vi编辑网卡
    2019.6.11_MySQL进阶二:主键与外键
    2019.6.13_笔试题目及答案
    2019.6.13_MySQL简单命令的使用
    2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15466824.html
Copyright © 2020-2023  润新知