专栏名称: 编程派
Python程序员都在看的公众号,跟着编程派一起学习Python,看最新国外教程和资源!
目录
相关文章推荐
Python开发者  ·  Python协会曝出丑闻:49万元被“熟人” ... ·  3 天前  
Python爱好者社区  ·  为什么苹果不对12306购票抽成30%? ·  3 天前  
Python爱好者社区  ·  某211副教授自爆“评职称”历程:评审内幕堪 ... ·  4 天前  
Python爱好者社区  ·  GPT-o1,彻底炸了。。。 ·  4 天前  
Python开发者  ·  Python3.8即将结束生命周期 ·  1 周前  
51好读  ›  专栏  ›  编程派

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

编程派  · 公众号  · Python  · 2017-03-15 11:32

正文

作者:lc19861217

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

全文约 5893 字,读完可能需要 9 分钟。

一. 前言

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

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命令行模式:

  1. create table appinfo(

  2.    id integer key autoincrement,

  3.    year varchar(32),

  4.    month varchar(32),

  5.    cnt   varchar(32));

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

Year 年份

Month 月份

Cnt 许可证数量

4)插入数据

2.搭建平台过程

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

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

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

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

  1. from flask import Flask, render_template

  2. import pygal

  3. from dbconnect import db

  4. from models import Appinfo

  5. app = Flask(__name__)

  6. @app.route('/')

  7. def APPLYTBLINFO():

  8.    db.create_all() http://www.cnblogs.com/在第一次调用时执行就可以

  9.    appinfos = Appinfo.query.all()

  10.    http://www.cnblogs.com/http://www.cnblogs.com/选择年份

  11.    list_year = []

  12.    http://www.cnblogs.com/http://www.cnblogs.com/选择月份

  13.    list_month = []

  14.    http://www.cnblogs.com/http://www.cnblogs.com/月份对应的数字

  15.    map_cnt = {}

  16.    for info in appinfos:

  17.        if info.year not in list_year:

  18.            list_year.append(info.year)

  19.            map_cnt[info.year] = [int(info.cnt)]

  20.        else:

  21.            map_cnt[info.year].append(int(info.cnt))

  22.        if info.month not in list_month:

  23.            list_month.append(info.month)

  24.    line_chart = pygal.Line()

  25.    line_chart.title = '信息'

  26.    line_chart.x_labels = map(str, list_month)

  27.    for year in list_year :

  28.        line_chart.add(str(year)+"年", map_cnt[year])

  29.    return render_template('index.html', chart=line_chart)

  30.    if __name__ == '__main__':

  31.    app.run(debug=True)

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

  1. from flask import Flask

  2. from flask_sqlalchemy import SQLAlchemy

  3. import os

  4. app = Flask(__name__)

  5. dbpath = app.root_path.replace("\\", "/")

  6. http://www.cnblogs.com/注意斜线的方向

  7. app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///'+dbpath+'/dzj.db'

  8. http://www.cnblogs.com/app.config['SQLALCHEMY_DATABASE_URI'] = r'sqlite:///D:/Python/dzj/dzj.db'

  9. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

  10. http://www.cnblogs.com/print(app.config['SQLALCHEMY_DATABASE_URI'])

  11. db = SQLAlchemy(app)

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

  1. from dbconnect import db

  2. http://www.cnblogs.com/http://www.cnblogs.com/许可证申请数量

  3. class Appinfo(db.Model):

  4.    __tablename__='appinfo' http://www.cnblogs.com/http://www.cnblogs.com/注意这句,网上有些实例上并没有

  5.    http://www.cnblogs.com/http://www.cnblogs.com/必须设置主键

  6.    id = db.Column(db.Integer, primary_key=True)

  7.    year = db.Column(db.String(20))

  8.    month = db.Column(db.String(20))

  9.    cnt = db.Column(db.String(20))

  10.    def __init__(self, year, month, cnt):

  11.        self.year = year

  12.        self.month = month

  13.        self.cnt = cnt

  14.    def __str__(self):

  15.        return self.year+":"+self.month+":"+self.cnt

  16.    def __repr__(self):

  17.        return self.year+":"+self.month+":"+self.cnt

  18.    def save(self):

  19.        db.session.add(self)

  20.        db.session.commit()

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

  1. style="width: 1000px;margin: auto">

  2.  id="container">
  3.    

    id="header" style="background: burlywood;height: 50px;">
  4.        

    style="font-size: 30px;  position: absolute; margin-top: 10px;margin-left: 300px;

  5.        text-align:center;">数据走势图分析

  6.    

  •    

    id="leftbar" style="width: 200px;height: 600px;background: cadetblue;float: left">
  •        

    style="margin-left: 20px">数据图总览


  •        

  •            

  •                

  •            

  •        

  •                   name="appinfo" href="appinfo.html" style="margin-left: 20px;">数量分析图

  •                

  •    

  •    

    id="chart" style="width: 800px;float: left">
  •       type="image/svg+xml" src= {{ chart.render_data_uri()|safe }} />

  •    

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

    python dzj.py

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

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


    题图:pexels,CC0 授权。

    点击阅读原文,查看更多 Python 教程和资源。

    推荐文章
    Python开发者  ·  Python协会曝出丑闻:49万元被“熟人”挪用,发现时账户仅剩183元,险些破产
    3 天前
    Python爱好者社区  ·  为什么苹果不对12306购票抽成30%?
    3 天前
    Python爱好者社区  ·  某211副教授自爆“评职称”历程:评审内幕堪比小说!
    4 天前
    Python爱好者社区  ·  GPT-o1,彻底炸了。。。
    4 天前
    Python开发者  ·  Python3.8即将结束生命周期
    1 周前
    扬子晚报  ·  享新鲜!购实惠!第十届江苏省农民合作社产品展销会邀你来吃吃吃!
    7 年前
    育学园  ·  案例分享 | 宝宝是“油耳朵”?竟然与遗传有关系
    7 年前
    黄三角早报  ·  微信上线新功能:面对面红包!当面拆,看谁还好意思发一分钱...
    7 年前
    深圳第一  ·  深圳一富婆清明带儿子回潮汕农村,结果她差点疯了!
    7 年前
    BOSS直聘  ·  TED演讲:每天给自己10分钟
    7 年前