为登陆逻辑添加mongo的存储

为登陆逻辑添加mongo的存储_第1张图片
图片3.png
为登陆逻辑添加mongo的存储_第2张图片
图片4.png
为登陆逻辑添加mongo的存储_第3张图片
图片5.png

coding = utf-8

导入pymysql

from pymysql import *

导入加密包

from hashlib import *

导入pymong

from pymongo import *

定义一个conn

conn = None

cur = None

注册

def register():
# 添加异常
try:
conn = mysql_conn()
# 游标
cur = conn.cursor()
select_params = [username]
select_sql = 'select * from py_users where uname = %s'
# execute(sql文件,[params参数])
cur.execute(select_sql,select_params)
ret = cur.fetchone()
# print(ret)
# 判断ret返回的值,如果返回的不是None,则证明注册失败
if ret is not None:
print('用户名已存在')
return
#如果返回的是None,则证明用户名没有被注册,进行下一步
#插入数据到数据库
insert_params = [username,sha_pwd]
insert_sql = 'insert into py_users values (0,%s,%s,0)'
count = cur.execute(insert_sql,insert_params)
#count 返回的是受影响的行,如果返回的是0,证明没有插入成功
if count == 0:
print('注册失败')
else:
print('注册成功')
# 关闭事务
conn.commit()
except Exception as ex:
print(ex)
finally:
close(conn,cur)

登陆

def login():
# 添加异常
try:
conn = mysql_conn()
cur = conn.cursor()
parmas = [username]
# 因为后面要判断密码,所有最好查找upwd,便于判断
select_sql = 'select upwd from py_users where uname = %s'
cur.execute(select_sql,parmas)
res = cur.fetchone()
#如果res 返回的是None,证明没有用户名,登录失败
if res is None:
print('登录失败,用户名或密码错误!')
return
# print(res[0])
#res返回的是一个元祖,所以要取得输入密码的sha1,res[0]得到的是输入密码的加密格式,判断和数据库中密码是否一样
# 定义一个pwd变量,取得密码的加密格式
pwd = res[0]
if pwd == sha_pwd:
print('登录成功')
#将登录的数据录入到mongo中
#col是选择的集合
col.insert_one({'uname':username,'upwd':sha_pwd})
else:
print('登录失败,用户名或密码错误!')
except Exception as ex:
print(ex)
finally:
close(conn,cur)

连接数据库

def mysql_conn():
return connect(host='localhost',port=3306,user='root',password='123456',database='py_demo',charset='utf8')

关闭

def close(conn,cur):
cur.close()
conn.close()

if name == 'main':
username = input('请输入用户名:')
userpwd = input('请输入用户密码:')

s1 = sha1()
s1.update(userpwd.encode())
sha_pwd = s1.hexdigest()
# print(sha_pwd)

# register()

# login()

# mongo先创建链接对象
mongo_client = MongoClient(host='localhost',port=27017)
# 选择要操作的数据库
db = mongo_client.py_demo
# 选择要使用的集合
col = db.py_users
# find_one 获取字典,判断是否为空
userinfo = col.find_one({'uname':username})
# 如果if判断 userinfo为空,则证明mongo数据库里面没有这个数据,就在mysql登录
if userinfo is None:
    # 在mysql数据库登录
    login()
    #如果在mysql中登录,还需要将第一次登录的信息录入到mongo中
else:
    # userinfo['upwd']获得的是用户输入的密码,userinfo是一个字典格式
    m_pwd = userinfo['upwd']
    if m_pwd == sha_pwd:
        print('在mongo中登录成功')
    else:
        print('在mongo中登录失败')

你可能感兴趣的:(为登陆逻辑添加mongo的存储)