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

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

责任编辑:

python用户登录a_Python入门案例-用户注册和登录相关推荐

  1. python实现循环注册登录_Python入门案例-用户注册和登录

    3. import xlwt 4. import re 5. 6. # from xlutils.copy import copy 7. 8. filepath = "./users.xls ...

  2. 视频教程-跟着王进老师学开发Python篇:基础入门案例讲解-Python

    跟着王进老师学开发Python篇:基础入门案例讲解 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ¥ ...

  3. 跟着王进老师学开发Python篇:基础入门案例讲解-王进-专题视频课程

    跟着王进老师学开发Python篇:基础入门案例讲解-166人已学习 课程介绍         共计45个项目案例+项目源码,跟着王进老师尽情玩转Python解释器! 本课程涉及Python的基础语法, ...

  4. 爬虫爬取python词汇_Python爬虫入门案例:获取百词斩已学单词列表

    百词斩是一款很不错的单词记忆APP,在学习过程中,它会记录你所学的每个单词及你答错的次数,通过此列表可以很方便地找到自己在记忆哪些单词时总是反复出错记不住.我们来用Python来爬取这些信息,同时学习 ...

  5. 使用Forms Authentication实现用户注册、登录 (二)用户注册与登录

    从这一部分开始,我们将通过一个实际的完整示例来看一下如何实现用户注册与登录.在介绍注册与登录之前,我们首先介绍一下如何判断用户是否已登录,并未后面的示例编写一些基础代码. 判断用户是否已经登录 首先, ...

  6. 【Python项目】Flask + MySQL 实现用户注册,登录、注销

    一.实战场景 Flask 框架实现用户的注册,登录和登出. Python基础入门到精通视频合集 [整整800集]Python爬虫项目零基础入门合集,细狗都学会了,你还不会? 二.主要知识点 flask ...

  7. 【Android】入门案例(一)——简单登录

    目录 前言 一.效果 二.步骤 三.注解 前言 实习期间,闲来无事,和师傅学学Android入门一下 Android的环境搭建和配置就不多说了,直接上干货 一.效果 先看下本案例想要实现的效果,由于是 ...

  8. B2C模式电商案例-用户注册与登录

    1.用户注册-短信验证码 1.1分析 1.2后端 创建 SmsController类,调用阿里大鱼工具类,发送短信 package com.czxy.changgou4.controller;impo ...

  9. python汇率程序_Python入门案例(一):汇率兑换

    一.汇率兑换V1.0 主要知识点:注释:说明信息,是不被执行的,单行注释用#,多行注释用三个单引号 命名:命名只能使用字母.数字和下划线:且须保证命名的唯一性:且不能以数字开头,Python是区分字母 ...

最新文章

  1. 分享Leangoo敏捷工具操作视频
  2. python与php8-详解Python中Unicode和utf-8
  3. JS拖拽,移动与拉伸
  4. java镂空图案,我想打印镂空的菱形
  5. python 面试题(2)--- 字符串连接问题
  6. 中国脚手架管市场趋势报告、技术动态创新及市场预测
  7. 如何在 Windows XP Service Pack 2 上启用 SQL Server 连接
  8. python文件行数运行结果_python统计文件行数
  9. Asp.net Web控件自定义类属性(经验篇)
  10. Oracle的sp,Oracle的X$表系列介绍之-X$KSMSP
  11. 惠普打印机136w硒鼓芯片怎么清零_惠普136w打印机怎么清零
  12. 阿里云服务器如何登录?阿里云服务器的三种登录方法
  13. linux系统禁用声卡,Linux如何设置声卡
  14. unity3d 地面印花_Unity3D 中的贴花效果
  15. VR测试视频源,双目立体视觉测试视频,大分辨率2880x1440-25fps
  16. 从DLL生成LIB文件
  17. 哲理故事与管理之道(21)-用情感激励下属
  18. Nginx 教程(一)-- 工作原理及安装配置
  19. TensorFlow之文本分类算法-2
  20. 计算机专业实习生一般做什么

热门文章

  1. vue pdf canvas 展示 pdfjs pdf.worker.js
  2. 计算机硬盘丢失了怎么找回,教你如何恢复苹果电脑硬盘里丢失的资料
  3. 使用at命令创建定时任务
  4. MySQL5.5版本安装操作
  5. axios下载pdf
  6. Flate压缩(2019.10.23)
  7. DOM操作(增删改查)详解
  8. 手机号码归属地查询接口(精确到地市)
  9. blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器)
  10. 阿里平头哥无剑100SOCwujian100挂UART外设之①将无剑100下载到gensys开发板