"""
1 navicat自己玩一玩
2 练习题一定要搞懂 照着我的思路一遍遍的看敲
3 熟悉pymysql的使用
4 sql注入产生的原因和解决方法 了解
5 思考:如何结合mysql实现用户的注册和登录功能?
"""
登录注册:
#数据库服务器地址 MYSQL_HOST="localhost" MYSQL_PORT=3306 MYSQL_USER="root" MYSQL_PASSWD="123456" MYSQL_DATABASE="atm_db" MYSQL_CHARSET="UTF8"
from interface import user_interface from lib import common login_user = None # 用户注册 def register(): while True: name = input("请输入注册的用户名:>>>").strip() if name == "b": break passwd = input("请输入密码:>>>").strip() re_passwd = input("请确认密码:>>>").strip() if passwd == re_passwd: passwd_md5 = common.get_md5(passwd) flag, msg = user_interface.back_register(name, passwd_md5) if flag: print(msg) break else: print(msg) else: print("两次密码输入不一致,请重新输入") # 用户登录 def login(): global login_user while True: name = input("请输入用户名:>>>").strip() if name == "b": break passwd = input("请输入密码:>>>").strip() passwd_md5 = common.get_md5(passwd) flag, msg = user_interface.back_login(name, passwd_md5) if flag: print(msg) login_user = name break else: print(msg) # 查看余额 @common.auth def check_balance(): # print(login_user) flag,result=user_interface.back_balance(login_user) if flag: print("用户{}余额为【{}】元".format(login_user,result["balance"])) func = { "0": exit, "1": register, "2": login, "3": check_balance, } # atm主界面 def run(): while True: print("欢迎来到ATM主界面".center(20, "="), end="") print(""" 1.注册 2.登录 3.查询余额 """) choice = input("请输入功能编号:>>>").strip() if choice in func: func.get(choice)() else: print("输入的功能编号不存在") if __name__ == '__main__': res, result = user_interface.back_balance("egon") print("用户{}余额为【{}】".format("egon", result["balance"]))
from conf import settings import pymysql # 封装数据库连接代码 class MysqlHandle: def __init__(self): self.host = settings.MYSQL_HOST self.port = settings.MYSQL_PORT self.user = settings.MYSQL_USER self.password = settings.MYSQL_PASSWD self.database = settings.MYSQL_DATABASE self.charset = settings.MYSQL_CHARSET self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, charset=self.charset) self.cursor = self.conn.cursor(pymysql.cursors.DictCursor) # 执行完毕返回的结果集默认以字典显示 def load_info(self, sql,val): res = self.cursor.execute(sql,val) result = self.cursor.fetchall() return res, result def insert_data(self,sql,val): res = self.cursor.execute(sql,val) self.conn.commit() return res def close_mysql(self): self.cursor.close() self.conn.close()
import pymysql from db import db_handle # 用户注册 def back_register(username, passwd): # 数据库连接 mysql_obj = db_handle.MysqlHandle() # 查看用户是否已经存在 sql = 'select * from userinfo where username=%s ' val = (username) res, result = mysql_obj.load_info(sql, val) # print(res) if res: mysql_obj.close_mysql() return False, "用户已存在" else: # sql = 'insert into userinfo(username,password) values(%s,%s);' # res=cursor.execute(sql,(username,passwd_md5)) sql1 = 'insert into userinfo(username,password) values(%s,%s);' val1 = (username, passwd) res1 = mysql_obj.insert_data(sql1, val1) if res1: mysql_obj.close_mysql() return True, "注册成功" # 用户登录 def back_login(username, passwd): # 数据库连接 mysql_obj = db_handle.MysqlHandle() # 查看用户是否存在 sql = 'select * from userinfo where username=%s ' val = (username) res, result = mysql_obj.load_info(sql, val) if not res: mysql_obj.close_mysql() return False, "用户不存在" sql1 = 'select * from userinfo where username=%s and password=%s ' val1 = (username, passwd) res1, result1 = mysql_obj.load_info(sql1, val1) if not res1: mysql_obj.close_mysql() return False, "密码错误" mysql_obj.close_mysql() return True, "登录成功" # 查看余额接口 def back_balance(username): # 数据库连接 mysql_obj = db_handle.MysqlHandle() sql = 'select * from userinfo where username=%s ' val = (username) res, result = mysql_obj.load_info(sql, val) if res: return True, result[0]
import hashlib #获取md5值 def get_md5(password): salt="I love python" m=hashlib.md5() m.update(salt.encode("utf-8")) m.update(password.encode("utf-8")) return m.hexdigest() #登录验证 def auth(func): from core import src def inner(*args,**kwargs): if src.login_user: res=func(*args,**kwargs) return res else: print("请先登录") src.login() res = func(*args, **kwargs) return res return inner if __name__ == '__main__': res=get_md5("123456") print(res)
from core import src if __name__ == '__main__': src.run()