栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-web系统初始化的设计与实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-web系统初始化的设计与实现

简介

本文针对后端服务初始化时,用户表的创建流程与具体实现做介绍。

Motor是一个异步非阻塞的MongoDB驱动程序,很好地支持了Tornado和asyncio的应用。
基于Tornado开发的后端server,为了提供优秀的系统性能通常会大量使用异步编程,因此Motor是此类系统操作MongoDB时的不二之选。
下面基于特定的场景,介绍系统初始化时涉及到的Motor操作MongoDB的方法:

设计

对于一个系统初始化,我设计为在首次访问系统时会自动创建一个admin用户用于后面的登录。

流程图:

首次访问系统的流程


这里面涉及到:

  1. 连接数据库

  2. 查询数据库是否有Users表

  3. 插入一条数据(插入数据时会自动创建表)

实现

下面分点介绍实现过程:

连接数据库

首先写一个异步连接数据库方法,使用Motor库的AsyncIOMotorClient类初始化连接:

from motor.motor_asyncio import AsyncIOMotorClient as MotorClientasync def conn_mongo():
    conn = MotorClient('localhost', 27017)
    db = conn.qaadmin    return db

注意:

  • 连接数据库的配置以你本人的环境为准;

  • 需要提前创建一个qaadmin数据库。

查询数据库是否有Users表

使用MotorDatabase类的list_collection_names方法来获取数据库中的所有collection名的列表,再判断Users是否在列表中来判断是否创建过用户:

async def user_check(self):
    collections = await conn_mongo.list_collection_names()    if 'Users' in collections:        return True
    else:        return False
插入用户数据

对于用户密码,在数据库中需要加密后存储。原始密码加盐后,使用md5加密:

import hashlibdef encrypt_password(origin: str, salt: int) -> str:
    """
    md5随机数加密用户密码
    :param origin: 原始密码
    :param salt:
    :return:
    """
    string = origin + str(salt)    return hashlib.md5(string.encode(encoding='utf-8')).hexdigest()

使用MotorColletion类的insert_one方法实现数据的插入,整个系统初始化部分对数据库的操作代码如下:

from libs.crypto import encrypt_passwordimport randomasync def user_check(self):
    collections = await conn_mongo.list_collection_names()    if 'Users' in collections:        return
    else:
        salt = random.randint(10, 99)
        new_user = {            'salt': salt,            'username': 'admin',            "password": encrypt_password('admin', salt)}
        result = await conn_mongo.Users.insert_one(new_user)
        print('Create user: admin, inserted id: %s' % repr(result.inserted_id))
参考

[1] MotorDatabase.list_collection_names
[2] inserting-a-document



作者:严北
链接:https://www.jianshu.com/p/e6c574ee3a95


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/223916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号