目的:实现用户登录功能
具体实现:
1.信息从数据库导出
2.账号密码验证
3.可以转入注册
4.注册数据传入数据库
5.注册非空唯一验证
6.失败三次重新进入登录界面
代码:
# 导入数据库函数
import pymysql
# 导入正则
import re
# 用户登录
class usre_login():
# 获得数据库对象
def __init__(self):
# 获得数据库链接对象
self.mysql_account = pymysql.connect('localhost','root','123','user_info') # ip地址,账号,密码,库名
# 获得数据库游标对象
self.mysql_cur = self.mysql_account.cursor()
# 用户登录函数
def login(self):
while True:
print('''
用户登录
1.登录
2.注册''')
choose=input('选择[输入序号]:>> ')
# 登录
if choose=='1':
print('=======登录======')
# 输入账号
account = input('请输入账号[10位以内字母]:')
# 账号存在验证
# sql 查询语句
sql_ver_account = "select * from account_password where account=(\'{0}\')".format(account)
# 执行语句
self.mysql_cur.execute(sql_ver_account)
# 返回全部数据
user_info=self.mysql_cur.fetchall()
if user_info == ():
input('账号不存在,任意键返回注册')
else:
number = 0
# 限定三次
while number<3:
# 输入密码
password = input('请输入密码[6位数字]:')
# sql 查询语句
sql_ver_account = "select * from account_password where account=(\'{0}\') and password=({1})".format(account,password)
# 执行语句
self.mysql_cur.execute(sql_ver_account)
# 返回全部数据
user_info=self.mysql_cur.fetchall()
if user_info == ():
number += 1
input('密码错误,任意键重新输入,还有{0}次机会'.format(4-number))
continue
else:
input('登录成功')
break
# 注册
elif choose=='2':
while True:
print('=======注册======')
# 输入账号
account = input('请输入账号[10位以内字母]:')
# 账号唯一验证:
# sql 查询语句
sql_ver_account = "select * from account_password where account=(\'{0}\')".format(account)
# 执行语句
self.mysql_cur.execute(sql_ver_account)
# 返回全部数据
user_info=self.mysql_cur.fetchall()
if user_info == ():
# 输入密码
password = input('请输入密码[6位数字]:')
# 账号正则表达式
ver_account = re.compile(r"^[a-zA-Z]{1,10}$")
# 密码正则表达式
ver_password = re.compile(r"^\d{6}$")
# 验证账号和密码 失败返回None
if ver_account.match(account) and ver_password.match(password):
# 账号密码合格保存数据库
# sql 增加语句
sql_info = 'insert into account_password values(\'{0}\',{1})'.format(account,password)
# 执行语句
self.mysql_cur.execute(sql_info)
# 提交数据库
self.mysql_account.commit()
# 关闭数据库
self.mysql_account.close()
input('注册成功,任意键返回登录')
break
else:
input('输入不正确,任意键返回重新输入')
continue
else:
input('账号重复,任意键返回')
break
else:
input('输入不正确,任意键重新输入')
if __name__ =='__main__':
# 实例化对象
login_user = usre_login()
login_user.login()
问题: 1.代码重复率有点高
2.SQL语句相关问题