模拟输入用户名密码与redis数据库和mysql数据库进行比对

今天讲了一个模拟登陆界面输入用户名和密码。老师讲的很模糊,而且听得不太明白,我的理解链接redis数据库和数据库存储的用户名和密码进行比对,如果匹配成功则登陆成功,如果没有该用户就到mysql数据库,如果能找到该用户并且密码正确然后登陆成功,然后又把该用户名和密码写到redis数据库中。
# python中链接redis和mysql数据库分别需要模块redis和pymysql模块
import pymysql
import redis

# 该函数是链接mysql数据库获取数据,sql是SQL语句用来查找表中的数据和你给的用户作比对
def mysql_data(sql):
    # host是链接本地数据库(如果要链接不是本地写IP地址),mysql数据库服务器的默认用户名是:root
    # passwd是mysql数据库服务器的密码,db='hr'是该数据库服务器中的具体的一个数据库,port=3306是通道
    db = pymysql.connect(host='localhost', user='root', passwd='',
                         db = 'hr', port=3306, charset='utf8')

    # 获取游标 --> 开辟一个缓冲区用于存放sql语句的执行结果
    cursor = db.cursor()
    # 执行sql语句
    cursor.execute(sql)
    # 获取SQL语句的执行结果
    data = cursor.fetchall()
    # 关闭数据库
    db.close()
    return data

# 链接redis数据库
def con_redis():
    # 默认的是6379端口, 密码是你的redis客户端的密码
    r = redis.Redis(host='ip地址', password='')
    return r

# 是否匹配成功redis和mysql数据库
# redis数据库是通过hset user xl 123456789
# user是所有用户的域名 xl是用户名 123456789是密码
def is_match(name, password):
    r = con_redis()
    # r.hkeys('user')拿到所有该域名下的用户名(byte类型)
    for usrName in r.hkeys('user'):
        # 下面转编码
        name1 = bytes.decode(usrName)
        # 判断你输入的用户名是否在redis数据库中有匹配的用户名
        if name == name1:
            pd = bytes.decode(r.hget('user', name))
            # 如果有在判断密码
            if password == pd:
                print('登录成功')
                break
            else:
                print('密码不正确,请重新输入')
                break
        # 下面是在redis数据库中找不到mysql数据库中找
        else:
            print('redis数据库不存在该用户')
            try:
                # SQL语句用于匹配输入的用户名和数据库的用户名
                sql = 'select * from tbuser where usr_name = "%s" ' % name
                # 调用mysql_data函数执行SQL语句
                # data的数据类型是元组((用户名, 密码),)只有一个元素也是元组
                data = mysql_data(sql)
                if password == data[0][1]:
                    print('登录成功')
                    # 登录成功后把该用户的数据写入到redis数据库中去
                    r = con_redis()
                    r.hset('user', name, password)
                    break
                else:
                    print('密码不正确,请重新输入')
                    break
            # 如果没有匹配成功则用户名不存在请输入有效的用户名
            except:
                print('用户名不存在')
                break


def main():
    name = input('username:')
    pd = input('password:')
    is_match(name, pd)


if __name__ == '__main__':
    main()

以上的代码是自己根据老师模糊的表达自己理解的,代码还有很大的问题,尽自己的最大努力了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值