1. 程式人生 > >flask框架+pygal+sqlit3搭建圖形化業務數據分析平臺

flask框架+pygal+sqlit3搭建圖形化業務數據分析平臺

百度 數據庫 python 技術 兼容性


一. 前言

先說下主要的框架和主要的圖形庫的特點:(個人見解)

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_templateimport pygalfrom dbconnect import dbfrom 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 Flaskfrom flask_sqlalchemy import SQLAlchemyimport 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="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=\‘#\‘" />
    </div></div></body>

技術分享

8)在命令行下切換到dzj所在目錄,執行:

python dzj.py

如下圖沒有報錯,即說明運行成功:

技術分享

9)在瀏覽器輸入:http://127.0.0.1:5000/ 查看結果

技術分享

flask框架+pygal+sqlit3搭建圖形化業務數據分析平臺