一. 前言

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

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

createtableappinfo(idintegerkeyautoincrement,yearvarchar(32),monthvarchar(32),cntvarchar(32));

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

Year 年份

Month 月份

Cnt 许可证数量

4)插入数据


2.搭建平台过程

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

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

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

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

fromflaskimportFlask,render_templateimportpygalfromdbconnectimportdbfrommodelsimportAppinfoapp=Flask(__name__)@app.route('/')defAPPLYTBLINFO():db.create_all()#在第一次调用时执行就可以appinfos=Appinfo.query.all()##选择年份list_year=[]##选择月份list_month=[]##月份对应的数字map_cnt={}forinfoinappinfos:ifinfo.yearnotinlist_year:list_year.append(info.year)map_cnt[info.year]=[int(info.cnt)]else:map_cnt[info.year].append(int(info.cnt))ifinfo.monthnotinlist_month:list_month.append(info.month)line_chart=pygal.Line()line_chart.title='信息'line_chart.x_labels=map(str,list_month)foryearinlist_year:line_chart.add(str(year)+"年",map_cnt[year])returnrender_template('index.html',chart=line_chart)if__name__=='__main__':app.run(debug=True)

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

fromflaskimportFlaskfromflask_sqlalchemyimportSQLAlchemyimportosapp=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 文件,代码如下:

fromdbconnectimportdb##许可证申请数量classAppinfo(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=yearself.month=monthself.cnt=cntdef__str__(self):returnself.year+":"+self.month+":"+self.cntdef__repr__(self):returnself.year+":"+self.month+":"+self.cntdefsave(self):db.session.add(self)db.session.commit()

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

<body><divid="container"><divid="header"><h3style="font-size:30px;position:absolute;margin-top:10px;margin-left:300px;text-align:center;">数据走势图分析</h3></div><divid="leftbar"><h3>数据图总览</h3><br/><table><tr><td><aname="appinfo"href="appinfo.html">数量分析图</a><br></td></tr></table></div><divid="chart"><embedtype="p_w_picpath/svg+xml"src={{chart.render_data_uri()|safe}}/></div></div></body>

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

python dzj.py

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

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