# coding:utf-8
from pymysql import *
from hashlib import * # hash算法的 Python 标准库
from pymongo import *
conn = None
cc = None
def mysql_conn():
""" 连接mysql数据库 """
return connect(host="192.168.126.128", port=3306, user="root", password="root", database="py_users", charset="utf8")
def mysql_close():
""" 关闭数据库链接 """
global conn
global cc
cc.close()
conn.close()
def register():
""" 注册 """
global conn
global cc
try:
conn = mysql_conn() # 创建mysql的链接
cc = conn.cursor() # 获取游标对象
# 接收用户所输入的用户名和密码
username = input("请输入用户名:")
password = input("请输入密码:")
# 构造hash对象
s1 = sha1()
# 传入要加密的字符串对象
s1.update(password.encode())
# 通过算法计算后的值
sha1_pwd = s1.hexdigest()
select_params = [username]
select_sql = "select upwd from py_users where name = %s;"
cc.execute(select_sql, select_params)
# 从游标对象中获取查询的结果集
res = cc.fetchone()
# print(res) # 如果没有查询到结果返回值是None
if res is not None:
# 表示用户名已经存在了
print("注册失败,此用户名已经存在")
return
# 表示用户名不存在,可以以此用户名进行注册
insert_params = [username, sha1_pwd]
insert_sql = "insert into py_users (name, upwd) VALUES (%s, %s);"
ret = cc.execute(insert_sql, insert_params)
if ret == 0:
print("注册失败")
else:
print("注册成功")
# 并且将注册的信息往mongodb数据库里面存储一份,以方便日后再登录的时候走mongodb的流程
db.insert({"name": username, "upwd": sha1_pwd})
conn.commit()
except Exception as e:
print(e)
finally:
mysql_close()
def login():
""" 登录 """
global conn
global cc
try:
conn = mysql_conn() # 创建mysql的链接
cc = conn.cursor() # 获取游标对象
# 根据用户名去查询密码
select2_params = [username]
select2_sql = "select upwd from py_users where name=%s;"
cc.execute(select2_sql, select2_params)
res = cc.fetchone() # 获取查询结果集
if res is None:
# 此没有查询到数据
print("mysql: 用户名或密码错误")
return
# print(res)
if res[0] == sha1_pwd:
print("mysql: 登录成功")
# 并且将登录的信息往mongodb数据库里面存储一份,以方便日后再登录的时候走mongodb的流程
#db.insert({"name": username, "upwd": sha1_pwd})
else:
print("mysql: 用户名或密码错误")
except Exception as e:
print(e)
finally:
mysql_close()
if __name__ == "__main__":
while True:
# 接收用户所输入的用户名和密码
username = input("请输入用户名:")
password = input("请输入密码:")
# 构造hash对象
s1 = sha1()
# 传入要加密的字符串对象
s1.update(password.encode())
# 通过算法计算后的值
sha1_pwd = s1.hexdigest()
# 连接mongodb数据库,目的就是减轻mysql数据库的压力, 主要数据的存储还是存储在mysql中的
# 注册的时候必须走mysql的流程
# 登录的时候减轻压力
# 先来mongo中获取用户的数据信息
mongo_client = MongoClient(host="192.168.126.128", port=27017)
# 选择要操作的数据库和集合
db = mongo_client["py_users"]["py_users"]
# 真正的查询,如果查询到信息了说明:此用户不是第一次登录此网站,所以走mongo数据库的流程
# 如果没有查询到信息说明:此用户是第一次使用此网站,走mysql的流程
res = db.find_one({"name": username})
#print(res) # 第一次的话是None
if res is None:
# 第一次登录此网站,注册用户信息
num = int(input("该用户不存在,是否选择注册: \n1 注册信息 2 退出系统 \n请输入:"))
if num ==1:
register()
if num ==2:
print("退出系统")
break
else:
# 此用户不是第一次登录此网站
if sha1_pwd == res["upwd"]:
print("mongo: 登录成功")
print("欢迎来到......")
break
else:
print("mongo: 登录失败,用户名或密码不正确")