距离上一次写博客已经有些日子了,之前的阎王殿工程由于未能明确脑洞的方向无疾而终,但相关的技术已转为了我的技术储备。在这半年里,我使用Tornado搭建了工作中所用的内部网站,对于Tornado的相关开发也有了一定的体会。因此,我决定再写一个关于Tornado的系列建站教程,这次我们要搭建一个假单(出勤)统计系统,可以统计员工每周的请假和出勤情况。
一 框架和工具
在这个系列中,我将选择以下工具和框架作为后端开发工具:
- Web框架:Tornado
- ORM框架:SQLAlchemy+Alembic
- 数据库:sqlite3
- 反向代理服务器:Nginx
- 自己挑个顺手的IDE,我这里使用pycharm
1 Tornado介绍
与Django相同,Tornado是另一种流行的python框架。它的特点是在处理I/O时采用非阻塞异步方式,这使得它可以非常快地处理大量I/O操作。与Django相比,Tornado算是个轻量级框架,它本身并不提供像Django中的那些Form类以及ORM框架,而是单纯提供web服务以及服务器相关的模块。这使得我们可以快速地搭建起一个网站的架子,但同时我们也不得不去寻找其他的ORM框架,比如SqlAlchemy。
2 SQLAlchemy
使用ORM框架,我们可以将数据库中的表和对象建立映射,从而便于我们对表进行操作。在Django中,由于Django自己提供了一套ORM框架,因此我们无需使用其他的ORM框架。然而,Tornado是个轻量级的web框架,并没有提供自己的ORM框架。因此,我们选用SQLAlchemy作为我们的ORM框架。通过使用SQLAlchemy,我们可以很容易地实现对数据的增删改查以及建立表等操作。然而,SQLAlchemy没有提供修改表结构的操作,所以我们需要引入Alembic来做数据迁移。
3 Alembic
Alembic是一款搭配SQLAlchemy使用的数据迁移工具,与SQLAlchemy是同一作者。Alembic用于给已使用了SQLAlchemy建立映射的表添加新的字段,或直接使用其建立新表。它的感觉有点像git,每一次对数据库的改动都会自动产生一个版本号,在写好相应的升版操作后,将数据库升级到新版即可。
4 Sqlite3和Nginx
这两个是我们的老朋友了,在这里就不在赘述了。
二 环境准备
首先安装好python,这里选用python3.9。安装好后用pip将tornado和SQLAlchemy还有Alembic安装好。
随后打开pycharm,建立我们的工程,我这里工程名叫LeaveManage,如图所示:
这里大家可以选择建立一个虚拟环境,也可以选择直接使用本机的环境。使用虚拟环境的好处是,我们可以给每个不同的Python建立属于自己的环境,相对“干净”一些。由于我们之前已经安装了相关的库,这里可以把Inherit global site-packages勾上,让虚拟环境直接把我们安装好的库复制过来。
点击Create,建立工程。
三 目录结构
我们在工程中新建一些包和文件夹,最终的目录结构如下所示:
- database包:在这个包中存放各种表的类以及CURD操作方法。
- migrate文件夹:我们将这个文件夹作为Alembic环境,之后所有对数据库的表结构修改都在这里进行。
- server文件夹:在这个文件夹下存放我们的主程序,在template文件夹下存放我们之后的各种前端模板。
- setting包:我们在这个文件夹下会建立一个配置文件,在里面存放一些配置信息;以及我们需要一些util方法来读取这些配置信息。
- venv:我们建立的虚拟环境,如果你没有建立虚拟环境,就不会有这个文件夹。
四 开始写code
在这篇博客中,我们先把整个网站的架子搭好,包括:
- 建立全局配置文件以及写好读取配置的util方法
- 数据库的util方法
- 使用Alembic建立三张表
- 写一个简单的index页面,配置好nginx,并将Tornado跑起来
我们在setting里建立globalsettings.py文件,在这个文件里我们将存放一些配置以及读取配置文件的方法。<