python3连接mysql数据库,登陆、注册功能统一

连接数据库操作封装代码:

#!/usr/bin/env python
# coding=utf-8
# mysql封装使用
import pymysql

class MysqlHelper():
    def __init__(self,host,port,db,user,passwd,charset='utf8'):
        self.host = host
        self.port = port
        self.db = db
        self.user = user
        self.password = passwd
        self.charset = charset
    def open(self):
        # 连接数据库
        self.conn = pymysql.connect(host=self.host,port=self.port,db=self.db,
                                    user=self.user,passwd=self.password,charset=self.charset)
        # 创建游标对象
        self.cursor = self.conn.cursor()
    # 关闭
    def close(self):
        self.cursor.close()
        self.conn.close()

    # 增加、修改、删除命令语句
    def cud(self,sql,params,msg="操作成功"):
        try:
            self.open()
            # 处理逻辑数据,传入sql语句以及参数化
            self.cursor.execute(sql,params)
            # 执行事务
            self.conn.commit()
            self.close()
            # 这样可以修改输出的操作成功信息提示
            print(msg)
        except Exception as e:
            self.conn.rollback()
            print("错误",e)
    # 查询所有数据,多个值
    def all(self,sql,params=()):
        try:
            self.open()
            self.cursor.execute(sql,params)
            data = self.cursor.fetchall()
            self.close()
            return data
        except Exception as e:
            print("错误", e)
#!/usr/bin/env python
# coding=utf-8
# 注册和登录合一起

from MysqlHelper import MysqlHelper
from hashlib import sha1

class ManageSystem():
    def main(self):
        while True:
            print("==============XXXXX管理系统==============")
            key = input("请输入相应功能数字代码(1/注册、2/登录、0/退出):")
            if key == "1":
                print("=============欢迎注册=============")
                self.register()
            elif key == "2":
                print("=============欢迎登录=============")
                self.login()
            elif key == "0":
                print("程序已退出,谢谢使用!")
                exit()
            else:
                print("输入有误,请重新输入!")
    # 加密功能
    def encryption(self,pwd):
        self.s1 = sha1()
        self.s1.update(pwd.encode())
        return self.s1.hexdigest()
    # 定义连接数据库功能
    def db_connect(self):
        return MysqlHelper(host="localhost",port=3306,user="root",passwd="123456",
                                    db="python3",charset="utf8")
    # 注册功能
    def register(self):
        register_name = input("请输入注册名:")
        # 判断用户名是否存在
        sql_select = "select name from userinfos"
        # 连接数据库
        conn = self.db_connect()
        # 使用MysqlHelper的all方法,获取结果
        result = conn.all(sql_select)
        # 存储数据库中姓名字段的列表
        name_list = []
        for i in range(len(result)):
            name_list.append(result[i][0])
        if register_name in name_list:
            print("抱歉该用户名'%s'已被使用,请重新注册!"%register_name)
            self.register()
        else:
            # 将来还需要对密码进行正则判断,比如6-8位,数字、下划线、字母组成
            register_passwd = input("请输入密码:")
            # 对密码进行加密
            pwd_register = self.encryption(register_passwd)
            # 写入数据库userinfos中
            sql_insert = "insert into userinfos(name,passwd)VALUES(%s,%s)"
            conn = self.db_connect()
            msg = ("'%s'用户名已注册成功!"%register_name)
            conn.cud(sql_insert,[register_name,pwd_register],msg)
    # 登录功能
    def login(self,count=0):
        if count <3:
            login_name = input("请输入用户名:")
            login_passwd = input("请输入密码:")
            # 对密码进行加密
            pwd_login = self.encryption(login_passwd)
            sql = "select passwd from userinfos WHERE name=%s"
            conn = self.db_connect()
            result = conn.all(sql,[login_name])
            # 判断处理
            if len(result) == 0:
                print("用户名错误!")
                count += 1
                self.login(count)
            elif result[0][0] == pwd_login:
                print("用户'%s'登录成功!"%login_name)
                exit()
            else:
                print("密码错误!")
                count += 1
                self.login(count)
        else:
            print("连续错误三次,请重新选择!")

if __name__ == "__main__":
    manage = ManageSystem()
    manage.main()

猜你喜欢

转载自blog.csdn.net/z564359805/article/details/81220408