流程:
注册:1.从用户手里拿到数据 —>2.判断数据是否符合要求—>3.不符合就要求用户重新输入—>4.符合那么就执行数据库语句(插入数据),插入前需要对数据库查重—>5.重复返回用户数据已存在—>6.不重复那么就插入成功并告知用户注册成功
登陆:1.从用户手里拿到数据—>2.判断数据是否符合要求—>3.不符合就要求用户重新输入—>4.符合那么就执行数据库语句(查询数据)—>5.有数据判断密码是否正确,密码正确那么就登陆成功—>6.无数据返回用户不存在
import pymysql import re import hashlib # 建立通道 db = pymysql.connect(host="127.0.0.1", user="root", password="12345678", database="cxtest") # 创建游标 cursor = db.cursor() md5 = hashlib.md5() # 注册方法 def register(): telephone = input('请输入手机号:') password = input('请输入密码(数字字母下划线6-12位):') # 1.用正则检验用户输入是否合法 if not (re.match('1[3-8][0-9]{9}$', telephone) and re.match('w{6,12}$', password)): print('请输入正确的用户名或密码!') return # 2.查询数据库中手机号是否已经被注册 sql = 'select telephone from use_info where telephone = "{}"'.format(telephone) cursor.execute(sql) if cursor.rowcount: print('该手机号已注册!') return # md5加密 md5.update(password.encode('utf8')) password = md5.hexdigest() try: # print(type(telephone), type(password)) sql = 'insert into use_info values("{}","{}")'.format(telephone, password) cursor.execute(sql) db.commit() print("注册成功") except: print('注册失败!') finally: # 关闭游标 db.close() def login(): # 输入用户名和密码 telephone = input('请输入手机号:') password = input('请输入密码(数字字母下划线6-12位):') if not (re.match('1[3-8][0-9]{9}$', telephone) and re.match('w{6,12}$', password)): print('请输入正确的用户名或密码!') return sql = 'select telephone,password from use_info where telephone = "{}"'.format(telephone) cursor.execute(sql) if not cursor.rowcount: print("用户不存在") return md5.update(password.encode("utf-8")) password = md5.hexdigest() if cursor.fetchone()[1] != password: print("请输入正确的密码") return print("登陆成功") if __name__ == '__main__': while True: print('请选择您的操作:') print('1.注册') print('2.登陆') print('0.退出') choose = input('请输入您的选择(1,2,0):') if choose == '1': register() print('注册成功,即将退出') break elif choose == '2': login() print('登陆成功,即将退出') break elif choose == '0': break
需要注意的情况是: cursor.execute(sql)执行sql语句时,应该是最容易报错的地方,写代码是需要先注意自己数据表的数据类型等。
知识点:正则 md5 pymysql