加入redis后登录逻辑如下图,将图中nosql的位置换为redis即可
- 用户数据存的键为用户名,值为密码
- 将原来MySQL操作的代码封装到一个方法中,代码如下
defmysql_login():
#redis中没有则到mysql中查询
sql='select upwd from py_users whereuname=%s'
params=[uname]
try:
conn= connect(host='localhost',port=3306,database='python',user='root',password='mysql',charset='utf8')
cur=conn.cursor()
cur.execute(sql,params)
result=cur.fetchone()
cur.close()
if result==None:
print '用户名错误,登录失败,数据来源于mysql'
else:
#当查询到用户及对应的密码时,将数据加入到redis中,以供后续登录使用
r.set(uname,upwd_sha1)
#判断密码是否正确
if result[0]==upwd_sha1:
print '登录成功,数据来源于mysql'
else:
print '密码错误,登录失败,数据来源于mysql'
except Exception,e:
print '登录失败,错误原因:%s' % e
finally:
conn.close()
- 创建user_redis.py文件,代码如下
#coding=utf-8
from MySQLdb import*
from hashlib importsha1
from redis import*
if __name__=='__main__':
try:
#接收输入用户名、密码
uname=raw_input('请输入用户名:')
upwd=raw_input('请输入密码:')
#对密码加密
s1=sha1()
s1.update(upwd)
upwd_sha1=s1.hexdigest()
#根据用户名查询密码
#先到redis上查,没有再到mysql上查
r=StrictRedis()
result=r.get(uname)
if result==None:
mysql_login()
else:
#redis中找到了这个用户名的数据
if result==upwd_sha1:
print '登录成功,数据来源于redis'
else:
print '密码错误,登录失败,数据来源于redis'
exceptException,e:
print '登录失败,错误原因:%s'%e