四、数据库:数据库综合使用

# coding:utf-8
from pymysql import *
from hashlib import *   # hash算法的 Python 标准库
from pymongo import *

conn = None
cc = None


def mysql_conn():
    """    连接mysql数据库   """
    return connect(host="192.168.126.128", port=3306, user="root", password="root", database="py_users", charset="utf8")


def mysql_close():
    """   关闭数据库链接   """
    global conn
    global cc

    cc.close()
    conn.close()


def register():
    """   注册   """
    global conn
    global cc

    try:
        conn = mysql_conn()  # 创建mysql的链接
        cc = conn.cursor()  # 获取游标对象

        # 接收用户所输入的用户名和密码
        username = input("请输入用户名:")
        password = input("请输入密码:")
        # 构造hash对象
        s1 = sha1()
        # 传入要加密的字符串对象
        s1.update(password.encode())
        # 通过算法计算后的值
        sha1_pwd = s1.hexdigest()

        select_params = [username]
        select_sql = "select upwd from py_users where name = %s;"
        cc.execute(select_sql, select_params)
        # 从游标对象中获取查询的结果集
        res = cc.fetchone()
        # print(res)   # 如果没有查询到结果返回值是None
        if res is not None:
            # 表示用户名已经存在了
            print("注册失败,此用户名已经存在")
            return
        # 表示用户名不存在,可以以此用户名进行注册
        insert_params = [username, sha1_pwd]
        insert_sql = "insert into py_users (name, upwd) VALUES (%s, %s);"
        ret = cc.execute(insert_sql, insert_params)
        if ret == 0:
            print("注册失败")
        else:
            print("注册成功")
            # 并且将注册的信息往mongodb数据库里面存储一份,以方便日后再登录的时候走mongodb的流程
            db.insert({"name": username, "upwd": sha1_pwd})
            conn.commit()
    except Exception as e:
        print(e)
    finally:
        mysql_close()


def login():
    """   登录   """
    global conn
    global cc
    try:
        conn = mysql_conn()  # 创建mysql的链接
        cc = conn.cursor()  # 获取游标对象
        # 根据用户名去查询密码
        select2_params = [username]
        select2_sql = "select upwd from py_users where name=%s;"
        cc.execute(select2_sql, select2_params)
        res = cc.fetchone()   # 获取查询结果集
        if res is None:
            # 此没有查询到数据
            print("mysql: 用户名或密码错误")
            return
        # print(res)
        if res[0] == sha1_pwd:
            print("mysql: 登录成功")
            # 并且将登录的信息往mongodb数据库里面存储一份,以方便日后再登录的时候走mongodb的流程
            #db.insert({"name": username, "upwd": sha1_pwd})

        else:
            print("mysql: 用户名或密码错误")
    except Exception as e:
        print(e)
    finally:
        mysql_close()


if __name__ == "__main__":
    while True:
        # 接收用户所输入的用户名和密码
        username = input("请输入用户名:")
        password = input("请输入密码:")
        # 构造hash对象
        s1 = sha1()
        # 传入要加密的字符串对象
        s1.update(password.encode())
        # 通过算法计算后的值
        sha1_pwd = s1.hexdigest()
        # 连接mongodb数据库,目的就是减轻mysql数据库的压力, 主要数据的存储还是存储在mysql中的
        # 注册的时候必须走mysql的流程
        # 登录的时候减轻压力
        # 先来mongo中获取用户的数据信息
        mongo_client = MongoClient(host="192.168.126.128", port=27017)
        # 选择要操作的数据库和集合
        db = mongo_client["py_users"]["py_users"]
        # 真正的查询,如果查询到信息了说明:此用户不是第一次登录此网站,所以走mongo数据库的流程
        # 如果没有查询到信息说明:此用户是第一次使用此网站,走mysql的流程
        res = db.find_one({"name": username})
        #print(res)  # 第一次的话是None
        if res is None:
            # 第一次登录此网站,注册用户信息
            num = int(input("该用户不存在,是否选择注册: \n1 注册信息 2 退出系统 \n请输入:"))
            if num ==1:
                register()
            if num ==2:
                print("退出系统")
                break
        else:
            # 此用户不是第一次登录此网站
            if sha1_pwd == res["upwd"]:
                print("mongo: 登录成功")
                print("欢迎来到......")
                break
            else:
                print("mongo: 登录失败,用户名或密码不正确")

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值