作者:lc19861217
原文:http://www.cnblogs.com/lc1217/p/6514049.html
全文約 5893 字,讀完可能需要 9 分鐘。
先說下主要的框架和主要的圖形庫的特點:(個人見解)
Django:python開發(fā)的一個重量級的web框架,集成了MVC和ORM等技術,設計之初是為了使開發(fā)復雜的、數據庫驅動的網站變得簡單,然而由于種種原因很少有企業(yè)用來開發(fā)大型網站,而是拿來做運維開發(fā)的很多。其注重組件的重用性和'可插拔性'。
Flask:python開發(fā)的一個輕量級的web框架,它使用簡單的核心,用 extension 增加其他功能,擴增的彈性很好,并且上手比較容易。
Echars:百度開源的一個圖像庫,界面可以做的很炫,但是主要是基于JS的,Django、flask對其的支持并不是很好,尤其是后臺用python處理數據展現到前臺很復雜。
Highchars:一個用純JavaScript編寫的一個圖表庫,兼容性也比較好,可以跨平臺。但是其數據需要轉成json格式才可以展現,對于需要后臺通過python處理的數據來說也是一個不小的負擔。Django、Flask對其的支持也不是很好。
Pygal:一個 Python 開發(fā)的動態(tài) SVG 圖表庫,功能可能沒有Echars或者Highchars強大,但是勝在它是一個python開發(fā)的庫,采用的是python的原生語法,使用起來很方便,不需要多么復雜的轉換。并且flask對其的支持很好,相對來說Django對pygal的支持就差點。
數據庫選擇了sqlite3,一個輕量級的關系型數據庫。因為數據都是經過統(tǒng)計后的數據,數據量小,并且不需要特別復雜的操作。
綜上所述,經過各種嘗試之后,確定了Flask+pygal+sqlite3的架構。
1.安裝Python
1). Python版本:
3.4.3 :注意安裝過程中選擇把python添加到環(huán)境變量
2). 說明
建議選擇高版本的Python,因為后面的兩個庫需要使用python自帶的pip工具安裝,否則直接下載庫的安 裝包的話容易安 裝失敗,主要是版本的 對應問題和依賴庫的缺少問題。
2.安裝Flask框架
在命令行模式下執(zhí)行:
pip install Flask
3.安裝圖形庫
在命令行模式下執(zhí)行:
pip install pygal
4.安裝ORM映射庫
在命令行模式下執(zhí)行:
pip install flask-sqlalchemy
5.下載sqlite3數據庫
直接在官網下載:http://www.sqlite.org/download.html
選擇:sqlite-tools-win32-x86-3170000.zip
解壓后包含三個可執(zhí)行文件
1.創(chuàng)建數據庫
1)在命令行模式下,切換到sqlite3目錄下,執(zhí)行下面命令:
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)創(chuàng)建項目文件目錄(dzj)
2)在項目文件目錄(dzj)下創(chuàng)建static文件夾和templates文件夾
3)把創(chuàng)建的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/在第一次調用時執(zhí)行就可以
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,代碼如下:
<> style='width: 1000px;margin: auto'>
<> id='container'>
<> id='header' style='background: burlywood;height: 50px;'>
<> style='font-size: 30px; position: absolute; margin-top: 10px;margin-left: 300px;
text-align:center;'>數據走勢圖分析
<> 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所在目錄,執(zhí)行:
python dzj.py
如下圖沒有報錯,即說明運行成功:
9)在瀏覽器輸入:http://127.0.0.1:5000/ 查看結果
題圖:pexels,CC0 授權。