Flask搭建图形化业务数据分析平台

点击上方

Python开发

”,选择“置顶公众号”

关键时刻,第一时间送达!

Flask搭建图形化业务数据分析平台

Flask搭建图形化业务数据分析平台

一. 前言

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

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)插入数据

    Flask搭建图形化业务数据分析平台

    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

    ()

    http

    ://

    www

    .

    cnblogs

    .

    com

    /在第一次调用时执行就可以

  •    appinfos

    =

    Appinfo

    .

    query

    .

    all

    ()

  •    http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /选择年份

  •    list_year

    =

    []

  •    http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /选择月份

  •    list_month

    =

    []

  •    http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /月份对应的数字

  •    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

    (

    "\\"

    ,

    "/"

    )

  • http

    ://

    www

    .

    cnblogs

    .

    com

    /注意斜线的方向

  • app

    .

    config

    [

    "SQLALCHEMY_DATABASE_URI"

    ]

    =

    r

    "sqlite:///"

    +

    dbpath

    +

    "/dzj.db"

  • http

    ://

    www

    .

    cnblogs

    .

    com

    /

    app

    .

    config

    [

    "SQLALCHEMY_DATABASE_URI"

    ]

    =

    r

    "sqlite:///D:/Python/dzj/dzj.db"

  • app

    .

    config

    [

    "SQLALCHEMY_TRACK_MODIFICATIONS"

    ]

    =

    True

  • http

    ://

    www

    .

    cnblogs

    .

    com

    /

    print

    (

    app

    .

    config

    [

    "SQLALCHEMY_DATABASE_URI"

    ])

  • db

    =

    SQLAlchemy

    (

    app

    )

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

  • from

    dbconnect

    import

    db

  • http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /许可证申请数量

  • class

    Appinfo

    (

    db

    .

    Model

    ):

  •    __tablename__

    =

    "appinfo"

    http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /注意这句,网上有些实例上并没有

  •    http

    ://

    www

    .

    cnblogs

    .

    com

    /

    http

    ://

    www

    .

    cnblogs

    .

    com

    /必须设置主键

  •    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

    =

    "

    width

    :

    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

    =

    "

    width

    :

    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

    =

    "

    width

    :

    800px

    ;

    float

    :

    left

    "

    >

  •      

    <embed

    type

    =

    "image/svg+xml"

    src

    =

    {{

    chart

    .

    render_data_uri

    ()|

    safe

    }}

    />

  •    

    </div>

  • </div>

  • </body>

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

    python dzj.py

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

    Flask搭建图形化业务数据分析平台

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

    Flask搭建图形化业务数据分析平台

    Flask搭建图形化业务数据分析平台

  • 作者:lc19861217 

  • 原文:

    http://www.cnblogs.com/lc1217/p/6514049.html

  • Python开发整理发布,转载请联系作者获得授权

  • Flask搭建图形化业务数据分析平台

    Flask搭建图形化业务数据分析平台

    【点击成为Java大神】