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="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  

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

               

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

                 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM