今天讲了一个模拟登陆界面输入用户名和密码。老师讲的很模糊,而且听得不太明白,我的理解链接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()
以上的代码是自己根据老师模糊的表达自己理解的,代码还有很大的问题,尽自己的最大努力了