【小沐学Python】Python实现Web图表功能(ECharts.js,Flask+Vue)

news2025/4/19 9:34:37

文章目录

  • 1、简介
    • 1.1 Vue
    • 1.2 Flask
  • 2、Flask + echarts.js + Vue
    • 2.1 Vue2 (CDN) + Vue-ECharts
    • 2.2 Vue3 (CDN) + Vue-ECharts
    • 2.3 Vue3 (npm) + Flask / nodejs
  • 3、FAQ
    • 3.1 Fatal error in launcher: Unable to create process using '"c:\users\tomcat\desktop\flask_english\admin\venv\scripts\python.exe" "C:\Users\tomcat\Desktop\flask_english\admin_server\venv\Scripts\flask.exe" init': ???????????
  • 结语

1、简介

1.1 Vue

渐进式JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架。

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。
在这里插入图片描述

1.2 Flask

Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架。Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。
在这里插入图片描述
安装flask库:

pip install flask -i https://pypi.douban.com/simple 
# or
pip install --upgrade pip
pip install flask

可以使用以下方法之一来结合flask和vue:

  • Jinja模板:在Jinja模板中导入Vue。
  • 单页应用:构建一个单页应用(SPA),完全分离flask和vue。
  • Flask蓝图:从一个Flask蓝图中提供Vue,部分分离两者。

from flask import Flask, jsonify
from flask_cors import CORS


# configuration
DEBUG = True

# instantiate the app
app = Flask(__name__)
app.config.from_object(__name__)

# enable CORS
CORS(app, resources={r'/*': {'origins': '*'}})


# sanity check route
@app.route('/ping', methods=['GET'])
def ping_pong():
    return jsonify('pong!')


if __name__ == '__main__':
    app.run()

运行上面的python脚本输出如下:
在这里插入图片描述
浏览器访问:http://127.0.0.1:5000/ping
在这里插入图片描述

2、Flask + echarts.js + Vue

2.1 Vue2 (CDN) + Vue-ECharts

  • index.html
<!DOCTYPE html>
<html>
  <head>
    <style>
      #app {
        height: 400px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <v-chart autoresize :option="option" />
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.5"></script>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.2.3"></script>
    <script>
      Vue.component('v-chart', VueECharts);

      new Vue({
        el: '#app',
        data() {
          return {
            option: {
              textStyle: {
                fontFamily: 'Inter, "Helvetica Neue", Arial, sans-serif',
              },
              title: {
                text: 'Traffic Sources',
                left: 'center',
              },
              tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b} : {c} ({d}%)',
              },
              legend: {
                orient: 'vertical',
                left: 'left',
                data: [
                  'Direct',
                  'Email',
                  'Ad Networks',
                  'Video Ads',
                  'Search Engines',
                ],
              },
              series: [
                {
                  name: 'Traffic Sources',
                  type: 'pie',
                  radius: '55%',
                  center: ['50%', '60%'],
                  data: [
                    { value: 335, name: 'Direct' },
                    { value: 310, name: 'Email' },
                    { value: 234, name: 'Ad Networks' },
                    { value: 135, name: 'Video Ads' },
                    { value: 1548, name: 'Search Engines' },
                  ],
                  emphasis: {
                    itemStyle: {
                      shadowBlur: 10,
                      shadowOffsetX: 0,
                      shadowColor: 'rgba(0, 0, 0, 0.5)',
                    },
                  },
                },
              ],
            },
          };
        },
      });
    </script>
  </body>
</html>

在这里插入图片描述

2.2 Vue3 (CDN) + Vue-ECharts

Use Vue-ECharts with Vue 3 (CDN + Global variables)
用如下方式在 HTML 中插入

  • index.html
<!DOCTYPE html>
<html>
  <head>
    <style>
      #app {
        height: 400px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <v-chart autoresize :option="option" />
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.37"></script>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.3.3"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue-echarts@6.2.3"></script>
    <script>
      Vue.createApp({
        data() {
          return {
            option: {
              textStyle: {
                fontFamily: 'Inter, "Helvetica Neue", Arial, sans-serif',
              },
              title: {
                text: 'Traffic Sources',
                left: 'center',
              },
              tooltip: {
                trigger: 'item',
                formatter: '{a} <br/>{b} : {c} ({d}%)',
              },
              legend: {
                orient: 'vertical',
                left: 'left',
                data: [
                  'Direct',
                  'Email',
                  'Ad Networks',
                  'Video Ads',
                  'Search Engines',
                ],
              },
              series: [
                {
                  name: 'Traffic Sources',
                  type: 'pie',
                  radius: '55%',
                  center: ['50%', '60%'],
                  data: [
                    { value: 335, name: 'Direct' },
                    { value: 310, name: 'Email' },
                    { value: 234, name: 'Ad Networks' },
                    { value: 135, name: 'Video Ads' },
                    { value: 1548, name: 'Search Engines' },
                  ],
                  emphasis: {
                    itemStyle: {
                      shadowBlur: 10,
                      shadowOffsetX: 0,
                      shadowColor: 'rgba(0, 0, 0, 0.5)',
                    },
                  },
                },
              ],
            },
          };
        },
      })
        .component('v-chart', VueECharts)
        .mount('#app');
    </script>
  </body>
</html>

在这里插入图片描述

2.3 Vue3 (npm) + Flask / nodejs

对于 Vue 3,你应该使用 npm 上可用的 Vue CLI v4.5 作为 @vue/cli。要升级,你应该需要全局重新安装最新版本的 @vue/cli:

# 全局安装 vue-cli
yarn global add @vue/cli
# 或
cnpm install -g @vue/cli

在这里插入图片描述

安装完后查看版本:

$ vue --version

在这里插入图片描述

然后在 Vue 项目中运行:

vue upgrade --next

vue create、vue ui、vue init三种方式创建Vue项目。

vue create命令是vue-cli3.x提供创建Vue项目的方式,模板是固定的,模板选项可自由配置。
vue ui命令也是vue-cli3.x提供创建Vue项目的方式,可以通过操作可视化页面来创建和管理Vue项目。
vue init命令是vue-cli2.x提供创建Vue项目的方式,可以使用github上面的一些模板来初始化项目。比如webpack就是官方推荐的标准模板。

创建项目:

vue init webpack vue3-test

在这里插入图片描述

在这里插入图片描述

cd vue3-test
npm run dev

在这里插入图片描述
访问网址:http://localhost:8080
在这里插入图片描述

npm install --save echarts vue-jsonp vue-resource

在这里插入图片描述

在main.js中添加下面两行代码:

import echarts from 'echarts'
Vue.prototype.$echarts = echarts

提示:import echarts from ‘echarts’ 引入echarts后,不能全局使用echarts,
所以通过Vue.prototype 将echarts保存为全局变量。原则上$echarts可以为任意变量名。

  • D:\0627\vue3-test\src\main.js:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.

import Vue from 'vue'
import App from './App.vue'
import VueResource from 'vue-resource'
import * as VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)
Vue.use(VueResource)

// import echarts from 'echarts'
import * as echarts from 'echarts';
Vue.prototype.$echarts = echarts

new Vue({
    el: '#app',
    render: h => h(App)
})

  • D:\0627\vue3-test\src\App.vue:
<template>
  <div class="main">
    <chart1 />
  </div>
</template>
<script>
import chart1 from "./components/chart1.vue";

export default {
  components: {
    chart1,
  },
};
</script>

然后新建文件chart1.vue。

  • 在template中添加一个存放echarts 的’div’容器。

  • 添加draw()方法,将官方文档中script内容复制到draw()中。

  • 修改echarts.init()为this. e c h a r t s . i n i t ( ) [ 因为上面第二步,将 e c h a r t s 保存到全局变量 echarts.init() [因为上面第二步,将echarts保存到全局变量 echarts.init()[因为上面第二步,将echarts保存到全局变量echarts中]

  • 在mounted中调用draw()方法。

  • D:\0627\vue3-test\src\components\chart1.vue:

<template>
  <div>
    <div id="echartContainer" style="width: 100%; height: 500px"></div>
  </div>
</template>

<script>
export default {
  name: "chart1",
  data() {
    return {};
  },
  methods: {
    draw() {
      var myChart = this.$echarts.init(
        document.getElementById("echartContainer"),
        "infographic"
      );
      myChart.setOption({
        xAxis: {},
        yAxis: {},
        series: [
          {
            symbolSize: 5,
            data: [],
            type: "bar",
          },
        ],
      });
      this.$http
        .get("http://localhost:5000/api/demo/", {
          headers: { "Access-Control-Allow-Origin": "*" },
        })
        .then((res) => {
          console.log(res.data);
          myChart.hideLoading();
          myChart.setOption({ series: [{ data: res.data.product }] });
        });
    },
  },
  mounted() {
    this.draw();
  },
};
</script>

<style></style>

提示:本例函数使用ES6写法。mounted() { }等同mounted:function() { } draw()方法同理。

  • test_flask:
from flask import Flask, jsonify, render_template
from flask.helpers import make_response
from flask_cors import CORS

app = Flask(__name__,
    static_folder='./dist',  #设置静态文件夹目录
    template_folder = "./dist",
    static_url_path="")  #设置vue编译输出目录dist文件夹,为Flask模板文件目录
CORS(app, resources=r'/*')

@app.route('/', methods=["GET"])
def index():
     return render_template("index.html")

@app.route('/api/demo/')
def api_test():
    ans = jsonify({
        "product": [5, 20, 36, 10, 10, 20]
    })
    return make_response(ans)


if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述

cd vue3-test
npm run build
npm run dev

在这里插入图片描述
访问:http://localhost:8080/
在这里插入图片描述
以上是开启了两个web服务器(Flask、nodejs).
以下是开一个web服务器(Flask)的方法:
将上面打包的dist文件复制到Flask的主文件夹里,然后运行test_flask.py如下。

在这里插入图片描述

3、FAQ

3.1 Fatal error in launcher: Unable to create process using ‘“c:\users\tomcat\desktop\flask_english\admin\venv\scripts\python.exe” “C:\Users\tomcat\Desktop\flask_english\admin_server\venv\Scripts\flask.exe” init’: ???

  • 问题分析:
    创建虚拟环境之后,又将python的工程文件夹路径改了,大概这个原因引起的。
    可以试试如下方式执行命令:
python3 -m pip install pygam


结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为HCIP | 高级网络工程师】刷题日记(6)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生 &#x1f43b;‍❄️个人主页&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;落798. &#x1f54a;️系列专栏&#xff1a;零基础学java ----- 重识c语言 ---- 计算机网络 &#x1f413;每日一…

机器学习工作流程

机器学习的定义机器学习的工作流程获取到的数据集的特性 1、什么是机器学习 机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测。 2、机器学习工作流程 机器学习工作流程总结 1、获取数据2、数据基本处理3、特征工程4、机器学习&#xff08;模型…

Maven POM和Maven构建配置文件操作笔记

目录 我到现在还是没有太搞懂Maven的作用&#xff0c;我只是有一个模糊的概念就是它可以添加很多的依赖&#xff0c;这样会使项目搭建起来更加方便&#xff0c;你可以谈谈你的看法吗&#xff1f; Maven POM 父&#xff08;Super&#xff09;POM POM 标签大全详解 Maven 构建…

【云原生】Kubeadm部署k8s

【云原生】-- Kubeadm部署k8s 一、部署步骤二、部署kubernetes1、所有节点关闭防火墙 核心防护 iptables规则 swap交换2、修改主机名3、调整内核参数 三、安装Docker1、所有节点安装docker2、所有节点配置Kubernetes源3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 四、…

【Java】抽象类与接口

文章目录 1.抽象类1.1抽象方法 2.接口3.抽象类和接口的区别3.1代码中区分&#xff1a;3.2设计层面区分 在面向对象编程中&#xff0c;抽象是非常重要的一个特征。在Java中可以通过抽象类或接口的形式实现这一特性。 1.抽象类 Java关键字 abstract对应抽象类的使用 1.1抽象方法…

【快速排序】

快速排序 递归法 1、快排 快速排序算法使基于分治策略的一个排序算法&#xff0c;其基本思想是&#xff0c;对于输入的子数组 nums[left : right] 按以下3个步骤排序&#xff1a; &#xff08;1&#xff09;分解&#xff1a;以 nums[left] 为基准元素将 nums[left : right] …

Wisej.NET 3.2 WiseJ Framework Crack

Web Development for Business Applications build ›› migrate ›› modernize ›› See the amazing things people are doing with Wisej.NET Customer storiesmadewithWisej.com Wisej 3.2 is released! read more ›› Wisej.NET Rapid .NET Web Development - 3.2 beta …

【深度学习】第一门课 神经网络和深度学习 Week 1 深度学习概论

文章目录 目录 目录 文章目录 1.1 欢迎来到深度学习 1. 为什么要学深度学习&#xff1f; 2. 我们将学习到哪些内容&#xff1f; 1.2 什么是神经网络&#xff1f; 引例 问题 题解 抽象 复杂化问题 建模 1.3 用神经网络进行监督学习 1. 概念辨析 2. 用神经网络进…

Hive 实战第一讲 hive基本介绍以及环境搭建

文章目录 1.Hive介绍1.1 hive 基本情况1.2 Hive架构原理1.3 Hive 安装1.4 元数据配置1.5 hive 服务部署1.6Hive常用交互命令1.6.1 Hive参数配置方式 1.Hive介绍 1.1 hive 基本情况 hive基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表。 Hive是…

程序员必备的工具网站,大幅度提升你的工作效率

前言&#xff1a; 相信很多人不光是在编程的过程中&#xff0c;在平时的生活中&#xff0c;也经常会收藏一些有用的网站&#xff0c;方便使用的时候&#xff0c;靠这些网站来解决一些麻烦的事情。 我就把我收藏的一些经常用的工具网站分享给你们&#xff0c;你们也可以收藏起来…

web网络安全

在学习网络安全之前&#xff0c;必须要先知道一个组织——OWASP。 OWASP是一个开源的、非盈利的全球性安全组织&#xff0c;致力于应用软件的安全研究。我们基于该组织公布的技术文档来学习相关网络攻击原理和预防措施&#xff0c;web安全的核心是——永远不要相信用户传过来的…

OLED显示实验

实验内容 点亮OLED&#xff0c;并实现ASCII 字符的显示。 OLED简介 OLED&#xff0c;即有机发光二极管&#xff08;Organic Light-Emitting Diode&#xff09;&#xff0c;又称为有机电激光显示&#xff08;Organic Electroluminesence Display&#xff0c; OELD&#xff09…

Java10

Java10 &#xff08;一&#xff09;、配置文件&#xff08;二&#xff09;、多线程2.1 并发和并行2.2 多线程的实现方式2.3 常见成员方法2.3.1 线程的优先级2.3.2 守护线程&#xff08;备胎线程&#xff09;2.3.3 礼让线程和插入线程 2.4 线程生命周期2.4 线程安全问题2.5 锁2.…

Android Input kl文件实现键值映射

Android Keyevent定义在KeyEvent.java 截图对应 public static final int KEYCODE_SYSRQ 120; adb shell input keyevent SYSRQLinux Scancode定义在input-event-codes.h #define KEY_SCALE 120可以看到是不对应的 本来想通过指纹双击实现截图功能&#xff0c;发现上报scanco…

浅谈性能测试策略的理解

面对日益复杂的业务场景和不同的系统架构&#xff0c;前期的需求分析和准备工作&#xff0c;需要耗费很多的时间。而不同的测试策略&#xff0c;也对我们的测试结果是否符合预期目标至关重要。 这篇博客&#xff0c;聊聊我个人对常见的性能测试策略的理解&#xff0c;以及它们…

tkinter+爬虫(re库,tkinter库详解)

1.安装和认识本次实验所需要的库 re库&#xff08;正则库&#xff0c;本次实验用于匹配文本&#xff09; tkinter库 &#xff08;GUI库&#xff0c;用于制作可视化界面&#xff09; requests库 &#xff08;网络请求库&#xff0c;用于制作爬虫&#xff09; re和tkinter均为…

node 脚本调试

Node 脚本调试 node --inspect-brk index.js 执行以上命令&#xff0c;然后打开浏览器的控制台会发现有个node的logo 点击这个图标就可以开始调试代码 调试webpack 只需要找到webpack的执行入口&#xff0c;然后执行以下命令&#xff0c;只要是node脚本都可以进行调试。 n…

Shell脚本完成web服务器的建设

一&#xff0c;要求 1&#xff0c;安装httpd软件 2&#xff0c;定义防火墙规则 3&#xff0c;设置selinux为强制模式 4&#xff0c;web服务器的端口为8080 5&#xff0c;web服务器的内容目录为 /www/8080 6&#xff0c;所有操作开机有效 7&#xff0c;所有操作必须进行…

2022年上半年软件设计师下午试题

【试题四】&#xff08;共15分&#xff09; 阅读下列说明和C代码&#xff0c;回答问题1至问题3&#xff0c;将解答写在答题纸的对应栏内。 工程计算中经常要完成多个矩阵相乘的计算任务&#xff0c;对矩阵相乘进行以下说明。 (1)两个矩阵相乘要求第一个矩阵的列数等于第二个…

适合广告行业使用的企业网盘工具

Zoho Workdrive 是一款非常适合广告行业使用的企业网盘工具&#xff0c;它可以帮助广告行业进行高效、有序的项目管理。作为一名广告行业从业者&#xff0c;你是否遇到过以下问题&#xff1f; 2.文件无法有效共享 团队合作效率低下客户需求无法及时满足 这些问题都会严重影响项…