使用flask快速搭建web应用


前言

在数据处理分析过程中,有快速搭建数据展示的应用场景需求,此时可以使用Flask快速进行web应用环境构建。本示例演示创建web应用及显示渲染echart折线图。


一、Flask是什么?

Flask 是一个用 Python 编写的轻量级 Web 应用框架。Flask 基于 WSGI(Web Server Gateway Interface)和 Jinja2 模板引擎,旨在帮助开发者快速、简便地创建 Web 应用。

二、使用步骤

1.引入包

需要引入flask框架,我们需要使用路由及渲染模板,服务端应用添加如下引用:

from flask import Flask, render_template

2.简单的服务端应用程序

编写简单的hello world, 启动运行 则可以通过http://localhost:8080 访问:

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'hello world'
    
if __name__ == '__main__':
    app.run(port=8080, debug=True)
    

3.添加用于显示折线图代码

构造返回的data数据,应用中可以根据实际情况进行调整,比如从指定库中获取
render_template函数中传入指定的页面及数据

# 设置图表信息及渲染指定页面
@app.route('/show')
def get_data():
    data = {
        "xaxis": [1, 2, 3, 4, 5, 6, 7],
        "series": [150, 230, 224, 218, 135, 147, 260]
    }
    return render_template('line-simple.html', page_title='echart demo', data=data)

4. 在templates目录下,创建用于渲染的line-simple.html页面

我们可以从echart官网下载相应的示例代码:https://echarts.apache.org/examples/zh/editor.html?c=line-simple

在前端html页面中,做如下三处调整,需要有一定的前端基础知识:

// js 中 获取后端返回的data对象
var data = JSON.parse('{{ data|tojson }}');

// option中设置相应的坐标及序列
option = {
  xAxis: {
      type: 'category',
      data: data['xaxis']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
        data: data['series'],
        type: 'line'
    }
  ]
};

设置后,启动运行,则可以通过http://localhost:8080/show 访问页面
在这里插入图片描述

5.完整的代码结构

前端代码

<!--
	此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=line-simple
-->
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
    <title>
        {% if page_title %}
            {{ page_title }}
        {% endif %}
    </title>
    <meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">

  <div id="container" style="height: 100%"></div>

  
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/echarts.min.js"></script>
  
  <!-- Uncomment this line if you want to dataTool extension
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/extension/dataTool.min.js"></script>
  -->
  <!-- Uncomment this line if you want to use gl extension
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts-gl/2/files/dist/echarts-gl.min.js"></script>
  -->
  <!-- Uncomment this line if you want to echarts-stat extension
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts-stat/latest/files/dist/ecStat.min.js"></script>
  -->
  <!-- Uncomment this line if you want to echarts-graph-modularity extension
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts-graph-modularity/2/files/dist/echarts-graph-modularity.min.js"></script>
  -->
  <!-- Uncomment this line if you want to use map
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts/4.9.0/files/map/js/world.js"></script>
  -->
  <!-- Uncomment these two lines if you want to use bmap extension
  <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
  <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/extension/bmap.min.js"></script>
  -->

  <script type="text/javascript">
    var data = JSON.parse('{{ data|tojson }}');
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};
    
    var option;

    option = {
  xAxis: {
      type: 'category',
      data: data['xaxis']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
        data: data['series'],
        type: 'line'
    }
  ]
};

    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }

    window.addEventListener('resize', myChart.resize);
  </script>
</body>
</html>

后端代码

from flask import Flask, render_template

app = Flask(__name__)

# 默认方法
@app.route('/')
def hello_world():
    return 'hello world'

# 设置图表信息及渲染指定页面
@app.route('/show')
def get_data():
    data = {
        "xaxis": [1, 2, 3, 4, 5, 6, 7],
        "series": [150, 230, 224, 218, 135, 147, 260]
    }
    return render_template('line-simple.html', page_title='echart demo', data=data)

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

总结

Flask是一个基于python的web框架,可以快速构建web交互系统,本文只是一个简单演示,当然,在实际应用当中,我们还有很多方面需要考虑,比如权限验证,数据安全等,可以做更多的应用扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值