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

原标题:Python入门案例-用户注册和登录

9d6392135bfe44acb2bd9a1222d0545e.png

1. 用户注册

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() 返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值