目的:实现用户登录功能

具体实现:

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语句相关问题