• flask框架+pygal+sqlit3搭建图形化业务数据分析平台


    一. 前言 

             先说下主要的框架和主要的图形库的特点:(个人见解)  

             Django:python开发的一个重量级的web框架,集成了MVC和ORM等技术,设计之初是为了使开发复杂的、数据库驱动的网站变得简单,然而由于种种原因很少有企业用来开发大型网站,而是拿来做运维开发的很多。其注重组件的重用性和“可插拔性”。  

            Flask:python开发的一个轻量级的web框架,它使用简单的核心,用 extension 增加其他功能,扩增的弹性很好,并且上手比较容易。  

    Echars:百度开源的一个图像库,界面可以做的很炫,但是主要是基于JS的,Django、flask对其的支持并不是很好,尤其是后台用python处理数据展现到前台很复杂。  

            Highchars:一个用纯JavaScript编写的一个图表库,兼容性也比较好,可以跨平台。但是其数据需要转成json格式才可以展现,对于需要后台通过python处理的数据来说也是一个不小的负担。Django、Flask对其的支持也不是很好。  

            Pygal:一个 Python 开发的动态 SVG 图表库,功能可能没有Echars或者Highchars强大,但是胜在它是一个python开发的库,采用的是python的原生语法,使用起来很方便,不需要多么复杂的转换。并且flask对其的支持很好,相对来说Django对pygal的支持就差点。  

            数据库选择了sqlite3,一个轻量级的关系型数据库。因为数据都是经过统计后的数据,数据量小,并且不需要特别复杂的操作。  

            综上所述,经过各种尝试之后,确定了Flask+pygal+sqlite3的架构。

    二.环境准备

            1.安装Python  

                    1). Python版本:  

                         3.4.3 :注意安装过程中选择把python添加到环境变量  

                    2). 说明  

                            建议选择高版本的Python,因为后面的两个库需要使用python自带的pip工具安装,否则直接下载库的安 装包的话容易安 装失败,主要是版本的                   对应问题和依赖库的缺少问题。

            2.安装Flask框架  

                    在命令行模式下执行:  

                         pip install Flask

           3.安装图形库  

                    在命令行模式下执行:  

                          pip install pygal

           4.安装ORM映射库  

                    在命令行模式下执行:  

                         pip install flask-sqlalchemy

           5.下载sqlite3数据库  

                   直接在官网下载:http://www.sqlite.org/download.html  

                   选择:sqlite-tools-win32-x86-3170000.zip  

                   解压后包含三个可执行文件

    三 、平台搭建过程

          1.创建数据库  

                1)在命令行模式下,切换到sqlite3目录下,执行下面命令:  

                    sqlite3.exe dzj.db  

                2)之后进入sqlite3命令行模式:  

              create table appinfo(
                    id integer key autoincrement,          
                    year varchar(32),         
                    month varchar(32),         
                    cnt   varchar(32)); 

                3)字段说明(主键是必须设置的)  

                     Year 年份  

                     Month 月份  

                    Cnt 许可证数量  

                4)插入数据  

                     
     

          2.搭建平台过程  

                 1)创建项目文件目录(dzj)  

                 2)在项目文件目录(dzj)下创建static文件夹和templates文件夹  

                 3)把创建的dzj.db数据库复制到当前目录下(dzj目录)  

                4)在项目文件目录(dzj)下添加dzj.py 文件(注意要和项目同名),并添加以下代码:

    复制代码
    from flask import Flask, render_template
    import pygal
    from dbconnect import db
    from models import Appinfo
    app = Flask(__name__)
    
    
    @app.route('/')
    def APPLYTBLINFO():
        db.create_all() #在第一次调用时执行就可以
        appinfos = Appinfo.query.all()
        ##选择年份
        list_year = []
        ##选择月份
        list_month = []
        ##月份对应的数字
        map_cnt = {}
        for info in appinfos:
            if info.year not in list_year:
                list_year.append(info.year)
                map_cnt[info.year] = [int(info.cnt)]
            else:
                map_cnt[info.year].append(int(info.cnt))
            if info.month not in list_month:
                list_month.append(info.month)
        line_chart = pygal.Line()
        line_chart.title = '信息'
        line_chart.x_labels = map(str, list_month)
        for year in list_year :
            line_chart.add(str(year)+"", map_cnt[year])
        return render_template('index.html', chart=line_chart)
        if __name__ == '__main__':
        app.run(debug=True)
    复制代码

     

                5)在项目文件目录(dzj)下添加dbconnect.py文件,代码如下: 

    复制代码
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    import os
    app = Flask(__name__)
    dbpath = app.root_path.replace("\", "/")
    #注意斜线的方向
    app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///'+dbpath+'/dzj.db'
    #app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///D:/Python/dzj/dzj.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    #print(app.config['SQLALCHEMY_DATABASE_URI'])
    db = SQLAlchemy(app)
    复制代码

     

               6)在项目文件目录(dzj)下添加models.py 文件,代码如下: 

    复制代码
    from dbconnect import db
    
    ##许可证申请数量
    class Appinfo(db.Model):
        __tablename__='appinfo' ##注意这句,网上有些实例上并没有
        ##必须设置主键
        id = db.Column(db.Integer, primary_key=True)
        year = db.Column(db.String(20))
        month = db.Column(db.String(20))
        cnt = db.Column(db.String(20))
    
        def __init__(self, year, month, cnt):
            self.year = year
            self.month = month
            self.cnt = cnt
    
        def __str__(self):
            return self.year+":"+self.month+":"+self.cnt
    
        def __repr__(self):
            return self.year+":"+self.month+":"+self.cnt
        
        def save(self):
            db.session.add(self)
            db.session.commit()
    复制代码

     

                7)在templates文件下添加index.html,代码如下:

    复制代码
    <body style=" 1000px;margin: auto">
    <div  id="container">
        <div id="header" style="background: burlywood;height: 50px;">
            <h2 style="font-size: 30px;  position: absolute; margin-top: 10px;margin-left: 300px;
            text-align:center;">数据走势图分析</h2>
        </div>
        <div id="leftbar" style=" 200px;height: 600px;background: cadetblue;float: left">
            <h2 style="margin-left: 20px">数据图总览</h2><br/>
            <table>
                <tr>
                    <td>
                       <a name="appinfo" href="appinfo.html" style="margin-left: 20px;">数量分析图</a><br>
                    </td>
                </tr>         
            </table>
        </div>
        <div id="chart" style=" 800px;float: left">
           <embed type="image/svg+xml" src= {{ chart.render_data_uri()|safe }} />
        </div>
    </div>
    </body>
    复制代码

     

                 8)在命令行下切换到dzj所在目录,执行:  

                       python dzj.py  

                     如下图没有报错,即说明运行成功:  

                   

                 9)在浏览器输入:http://127.0.0.1:5000/ 查看结果

                     

  • 相关阅读:
    DynamicLibrary动态查询需要的一个CS 文件下载
    指定的命名连接在配置中找不到、非计划用于 EntityClient 提供程序或者无效
    ACCESS的一个相对好用的数据库连接字符串
    ASP.NET 入门 博客园文章 索引篇
    c# 最小化到系统栏,时钟,随机语句,程序发布 读书笔记本 (三)
    poj 2817 WordStack (状态dp)
    hdu 4380 Farmer Greedy (计算几何 2012 MultiUniversity Training Contest 9 )
    hdu 4353 Finding Mine (计算几何 2012 MultiUniversity Training Contest 6 )
    poj 3735 Training little cats (矩阵快速幂)
    hdu 4374 One hundred layer (dp +单调队列 2012 MultiUniversity Training Contest 8 )
  • 原文地址:https://www.cnblogs.com/dpf-learn/p/8027988.html
Copyright © 2020-2023  润新知