028-86261949

当前位置:首页 > 技术交流 > Python入门案例-用户注册和登录

Python入门案例-用户注册和登录

2019/03/13 11:15 分类: 技术交流 浏览:0

今天源码时代老师将为大家分享的是Python入门案例-用户注册和登录,跟着老师一起看看吧!

一、 用户注册

1.1. 需求

   1. 用户注册的数据包含: 用户名,密码,邮箱

   2. 用户名长度为6-14之间并且不能够重复

   3. 密码只能是数字和字母

   4. Email是合法的并且不能够重复

   5. 将符合要求的用户数据保存到文件中(user.xls)

1.2. 代码实现

用户注册.py

  1. import os  

  2. import xlrd  

  3. import xlwt  

  4. import re  

  5.   

  6. # from xlutils.copy import copy  

  7.   

  8. filepath = "./users.xls"  

  9.   

  10.   

  11. def readUsers():  

  12.     """ 

  13.     读取excel中的文件并且将数据以列表的形式返回 

  14.     :return: 列表 

  15.     """  

  16.     # 检查文件是否存在  

  17.     isFile = os.path.isfile(filepath)  

  18.     if not isFile:  

  19.         # 如果文件不存在,返回空的列表.意味着每个用户  

  20.         return []  

  21.   

  22.     # 如果文件存在然后读取excel中的数据, 将每行数据放在一个字典中, 将所有行数据放在列表中  

  23.     workbook = xlrd.open_workbook(filepath)  

  24.     booksheet = workbook.sheet_by_index(0)  # 得到第一个booksheet  

  25.     nrows = booksheet.nrows  # 得到里面的数据行数  

  26.   

  27.     rows = []  # 存放所有数据  将每行数据放在一个字典中, 将所有行数据放在列表中  

  28.     """ 

  29.     rows中的数据结构: 

  30.     [{'username': 'admin', 'password': 'admin', 'email': 'admin@itsource.cn'}, 

  31.      {'username': 'zhangsan', 'password': 'zhangsan', 'email': 'zhangsan@itsource.cn'}] 

  32.     """  

  33.     titles = ["username", "password", "email"]  # 每行数据的键  

  34.     for i in range(0, nrows):  

  35.         # 根据excel中的行数循环出得到每行的数据  

  36.         values = booksheet.row_values(i)  # 得到每行数据  

  37.         # 根据上面titles中提供数据的键与值生成一个字典  

  38.         row = dict(zip(titles, values))  # 将每行数据的键值合并生成一个字典  

  39.   

  40.         # 将excel中的每行数据对应的字典放在rows中保存  

  41.         rows.append(row)  # 将每行数据放在rows中  

  42.   

  43.     return rows  

  44.   

  45.   

  46. def checkUsername(username):  

  47.     # 去除两边空格  

  48.     username = username.strip()  

  49.   

  50.     # 检查用户名的长度  

  51.     length = len(username)  

  52.     if length < 6 or length > 14:  

  53.         print("用户名长度必须在6-14之间")  

  54.         return False  

  55.   

  56.     # 检查用户名是否存在  

  57.     rows = readUsers()  

  58.     for row in rows:  

  59.         if row['username'] == username:  

  60.             print("用户名已经被占用,请更换用户名!")  

  61.             return False  

  62.     else:  

  63.         return True  

  64.   

  65.   

  66. def checkPassword(password, repassword):  

  67.     if not password.isalnum():  

  68.         print("密码必须是数字或者字符串!")  

  69.         return False  

  70.   

  71.     if password.strip() != repassword.strip():  

  72.         print("密码和确认密码必须一致!")  

  73.         return False  

  74.     return True  

  75.   

  76.   

  77. def checkEmail(email):  

  78.     email = email.strip()  

  79.     if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None:  

  80.         print("邮箱格式不正确")  

  81.         return False  

  82.   

  83.     rows = readUsers()  

  84.     for row in rows:  

  85.         if row['email'] == email:  

  86.             print("邮箱已经被占用,请更邮箱!")  

  87.             return False  

  88.   

  89.     return True  

  90.   

  91.   

  92. def write_excel_data1(row):  

  93.     """ 

  94.     注册成功之后:  读取原Excel中的原来的所有数据, 再将新的数据放到原来的所有数据中. 

  95.     再将所有数据重新保存到新的Excel中,覆盖原来的Excel 

  96.     :param row: 

  97.     :return: 

  98.     """  

  99.     # 读取老的数据  

  100.     rows = readUsers()  

  101.     # 添加新的数据  

  102.     rows.append(row)  

  103.   

  104.     # 将所有数据重新写入Excel覆盖原来的Excel  

  105.     workbook = xlwt.Workbook()  

  106.     sheet = workbook.add_sheet("用户信息", cell_overwrite_ok=True)  

  107.     for i in range(0, len(rows)):  

  108.         sheet.write(i, 0, rows[i]["username"])  

  109.         sheet.write(i, 1, rows[i]["password"])  

  110.         sheet.write(i, 2, rows[i]["email"])  

  111.     workbook.save(filepath)  

  112.   

  113.   

  114. if __name__ == "__main__":  

  115.     while True:  

  116.         username = input("请输入用户名:")  

  117.         password = input("请输入密码:")  

  118.         repassword = input("请输入确认密码:")  

  119.         email = input("请输入邮箱:")  

  120.   

  121.         # 检查用户名  

  122.         result = checkUsername(username)  

  123.         if not result:  

  124.             continue  

  125.   

  126.         # 检查密码  

  127.         result = checkPassword(password, repassword)  

  128.         if not result:  

  129.             continue  

  130.   

  131.         # 检查Email  

  132.         result = checkEmail(email)  

  133.         if not result:  

  134.             continue  

  135.   

  136.         # 全部通过后准备将注册的信息保存到Excel中  

  137.         row = {"username": username, "password": password, "email": email}  

  138.         write_excel_data1(row)  

  139.         print("注册成功")  

  140.         break  

1.3. 运行效果:

  1. 请输入用户名:zhangsan  

  2. 请输入密码:zhangsan  

  3. 请输入确认密码:zhangsan  

  4. 请输入邮箱:zhangsan@itsource.cn  

  5. 注册成功  

 

 2. 需求二:用户登录

2.1. 需求

   1. 基于上一题的用户注册数据进行登陆

   2. 如果输入错误三次就把用户名写入到一个文件(erroruser.xls)中. 该文件用来记录非法用户

   3. 登陆成功之后将登陆成功的状态记录在status.txt文件中. yes表示登录的状态.  no表示没有登陆的状态

    - 登陆之后的文件内容:

     status.txt中的内容:

     yes

   - 没有登陆或者登陆退出之后的文件内容:

    status.txt中的内容:

    no

2.2. 代码实现

用户登录.py

  1. from data import readUsers  

  2. from data import myinput  

  3. import xlwt  

  4.   

  5. # 记录登录次数  

  6. error_count = 0  

  7.   

  8. while 1:  

  9.     username = myinput("请输入用户名:")  

  10.     password = myinput("请输入密码:")  

  11.   

  12.     # 得到users.xls中的所有数据  

  13.     rows = readUsers()  

  14.   

  15.     # 用户名和密码与所有数据进行对比  

  16.     for row in rows:  

  17.         if row['username'] == username and row['password'] == password:  

  18.             print("登录成功!")  

  19.             error_count = 0  

  20.   

  21.             # 记录登录成功的标识  

  22.             with open('./status.txt', 'w') as f:  

  23.                 f.write("yes")  

  24.   

  25.             # 登陆成功之后跳出循环  

  26.             break  

  27.     else:  

  28.         print("登录失败!")  

  29.         # 记录登录成功的标识  

  30.         with open('./status.txt', 'w') as f:  

  31.             f.write("yes")  

  32.   

  33.         # 登录次数+1  

  34.         error_count += 1  

  35.         if error_count >= 3:  

  36.             workbook = xlwt.Workbook()  

  37.             sheet = workbook.add_sheet("错误用户名")  

  38.             sheet.write(0, 0, username)  

  39.             workbook.save("./erroruser.xls")  

 

data.py:

  1. import os  

  2. import xlrd  

  3.   

  4. filepath = "./users.xls"  

  5.   

  6.   

  7. def readUsers():  

  8.     """ 

  9.     读取excel中的文件并且将数据以列表的形式返回 

  10.     :return: 列表 

  11.     """  

  12.     # 检查文件是否存在  

  13.     isFile = os.path.isfile(filepath)  

  14.     if not isFile:  

  15.         # 如果文件不存在,返回空的列表.意味着每个用户  

  16.         return []  

  17.   

  18.     # 如果文件存在然后读取excel中的数据, 将每行数据放在一个字典中, 将所有行数据放在列表中  

  19.     workbook = xlrd.open_workbook(filepath)  

  20.     booksheet = workbook.sheet_by_index(0)  # 得到第一个booksheet  

  21.     nrows = booksheet.nrows  # 得到里面的数据行数  

  22.   

  23.     rows = []  # 存放所有数据  将每行数据放在一个字典中, 将所有行数据放在列表中  

  24.     """ 

  25.     rows中的数据结构: 

  26.     [{'username': 'admin', 'password': 'admin', 'email': 'admin@itsource.cn'}, 

  27.      {'username': 'zhangsan', 'password': 'zhangsan', 'email': 'zhangsan@itsource.cn'}] 

  28.     """  

  29.     titles = ["username", "password", "email"]  # 每行数据的键  

  30.     for i in range(0, nrows):  

  31.         # 根据excel中的行数循环出得到每行的数据  

  32.         values = booksheet.row_values(i)  # 得到每行数据  

  33.         # 根据上面titles中提供数据的键与值生成一个字典  

  34.         row = dict(zip(titles, values))  # 将每行数据的键值合并生成一个字典  

  35.   

  36.         # 将excel中的每行数据对应的字典放在rows中保存  

  37.         rows.append(row)  # 将每行数据放在rows中  

  38.   

  39.     return rows  

  40.   

  41.   

  42. def myinput(prompt=''):  

  43.     """ 

  44.     获取用户输入去除两边空格 

  45.     :param prompt: 

  46.     :return: 

  47.     """  

  48.     return input(prompt).strip()  

#标签:Python入门