简介
本文针对后端服务初始化时,用户表的创建流程与具体实现做介绍。
Motor是一个异步非阻塞的MongoDB驱动程序,很好地支持了Tornado和asyncio的应用。
基于Tornado开发的后端server,为了提供优秀的系统性能通常会大量使用异步编程,因此Motor是此类系统操作MongoDB时的不二之选。
下面基于特定的场景,介绍系统初始化时涉及到的Motor操作MongoDB的方法:
设计
对于一个系统初始化,我设计为在首次访问系统时会自动创建一个admin用户用于后面的登录。
流程图:
这里面涉及到:
- 连接数据库
- 查询数据库是否有Users表
- 插入一条数据(插入数据时会自动创建表)
实现
下面分点介绍实现过程:
连接数据库
首先写一个异步连接数据库方法,使用Motor库的AsyncIOMotorClient
类初始化连接:
1 | from motor.motor_asyncio import AsyncIOMotorClient as MotorClient |
注意:
- 连接数据库的配置以你本人的环境为准;
- 需要提前创建一个
qaadmin
数据库。
查询数据库是否有Users表
使用MotorDatabase
类的list_collection_names
方法来获取数据库中的所有collection名的列表,再判断Users
是否在列表中来判断是否创建过用户:
1 | async def user_check(self): |
插入用户数据
对于用户密码,在数据库中需要加密后存储。原始密码加盐后,使用md5加密:
1 | import hashlib |
使用MotorColletion类的insert_one
方法实现数据的插入,整个系统初始化部分对数据库的操作代码如下:
1 | from libs.crypto import encrypt_password |
参考
[1] MotorDatabase.list_collection_names
[2] inserting-a-document