本篇是系列文章的第二篇:
(一)需求分析&技术实现
(二)初步搭建Django环境
(三)页面布局&Django模板
(四)SQL+Pandas初步处理数据
(五)前端表单交互
(六)Ajax异步传参与加载
(七)前端数据格式的处理
(八)DataTables接管前端表格
(九)Pyecharts实现交互图表
(十)静态图表的展示
(十一)“导出数据至Excel”功能
(十二)添加和配置缓存
(十三)用户登录系统
(十四)部署Django至生产环境
既然强调是在线数据分析,那么顾名思义Web框架是一切的基础。其实很多语言都有出色的Web框架,我选用Python实现也仅仅是因为自己是二手程序员一手数据分析师,更熟悉Python罢了。而Django也不是Python下的唯一选择,Python下的还有Flask, Tornado, FastAPI等等选择,但我在实际使用中感觉基本上大同小异,使用者可以比较容易做到一通百通。
Django采用MTV(M-Model, T-Template, V-View)框架,其实是一种非常经典的Web开发结构MVC模式的变种。下面这张图很好的解释了MTV分别是什么:
![38a5e18e7786cf5e96cf8672a56b32b0.png](https://i-blog.csdnimg.cn/blog_migrate/2ccfd97e9ee625cefbc3811816b90b42.jpeg)
- M - Model模型,负责数据储存在的服务器端基本结构,以及数据别名、验证信息等一些基础内容。
- T - Template模板,负责后端传来的数据如何在Web前端展现以及前端的交互操作。
- V - View视图,既负责与数据库做沟通增删改查,也负责加工数据决定什么数据传到前端。因此视图也是模型和模板的桥梁。
实际操作中,可以用cmd启动一个全新的Django项目,假设我们命名项目为datasite:
django-admin startproject datasite
并且在该项目下马上创建一个app如chpa_data:
python manage.py startapp chpa_data
也可以在Pycharm的New Project菜单中创建Django项目一歩搞定:
![e9439f07e648645a9738e8bf51f5b0c6.png](https://i-blog.csdnimg.cn/blog_migrate/a4b9087c2a82fc7066d30f28fcdf05be.jpeg)
可以在项目文件夹中执行下方命令启动开发服务器:
python manage.py runserver 0.0.0.0:8088
在浏览器中输入 127.0.0.1:8088,出现下方页面则表示启动成功
![7b25060b38d53f21f8b16cc446cde7a2.png](https://i-blog.csdnimg.cn/blog_migrate/744f7abcbf34ac3cddc268ccb73ec5d1.jpeg)
此外,记得别忘了在datasite文件夹的settings.py文件内将chpa_data加入installed app:
INSTALLED_APPS = [
而此时的项目文件夹结构为:
![9af9d1552497f15d957c3e935710feaf.png](https://i-blog.csdnimg.cn/blog_migrate/43d9d4068c15f30a6dcc14a38025df9f.png)
传统的Django项目第一步往往从models.py定义数据结构开始,继而编写views.py处理数据。此时项目页面还没有Template部分,一般需要手动在chpa_data文件夹下创建templates文件夹并编写对应views渲染对象的html模板。
但如果我们再次回忆文章前面部分的Django架构图片,可以意识到,Django最核心的部分其实是View层,而Model层和Template层都不是必须的。Django可以不自己编写Model,不使用自带的ORM,在View层用SQL Alchemy或Pyodbc等中间库直接用SQL语句操作数据库。Django也可以不渲染页面,在View层直接返回API的JsonResponse。
在本例当中,我决定不使用Model层。个人觉得Django ORM只有在处理事务型数据时有一些易用性和可读性方面的优势,在处理大量量化数据时,可以直接编写SQL语句或用SQL语句简单Select数据后用Pandas进行复杂处理。
Dummy测试数据链接:https://share.weiyun.com/q1EZl8lW 密码:xaw3kg
我们可以在views.py用类似下面的语句直接操作数据库将数据读取到Pandas的df:
from
注意上方代码中sqlalchemy的数据库连接引擎写法很多变,为各式数据库Dialect结合Driver的组合,详细请参考下方的页面。此处根据你选择的数据库也有可能需要下载额外的包。
https://docs.sqlalchemy.org/en/13/core/engines.htmldocs.sqlalchemy.org此时,如果想要在开发服务器测试上方的views,我们还需要设置一下URL。
我们选择先在项目目录datasite文件夹的urls.py里引用app chpa_data的urls:
from
而在chpa_data目录里再手动创建urls.py,里面写入app下views.py里每个view对应的url:
from
注意上方URL是一个嵌套的关系,也就是我要访问views.index实际上需要访问的URL的是chpa/index而不是index。
![18002c5f735d9f1ab1f988ebf1ab4aea.png](https://i-blog.csdnimg.cn/blog_migrate/8093faa010191c9f1956978cd6ff7bbf.png)
在浏览器输入127.0.0.1:8088/chpa/index,出现下方页面,说明测试成功,返回了chpa_data app内views.py里"Select count(*) from data"的结果6065706,而0是Pandas的行索引。
![39105234c9133996e2c8f7324151136c.png](https://i-blog.csdnimg.cn/blog_migrate/44d91cbcd70220596c04ef7b8b438b19.png)
至此,我们打通了这个项目从后端到前端的数据链,实现了从浏览器的一行URL返回指定数据库SQL查询结果的过程,看似简单,却是最关键的一个步骤。
下一篇请移步:
ccpic:Python Django+SQL+Pandas+Pyecharts自建在线数据分析平台(三)zhuanlan.zhihu.com