Python入门案例-用户注册和登录
2019/03/13 11:15 分类: 技术交流 浏览:37
今天源码时代老师将为大家分享的是Python入门案例-用户注册和登录,跟着老师一起看看吧!
一、 用户注册
1.1. 需求
1. 用户注册的数据包含: 用户名,密码,邮箱
2. 用户名长度为6-14之间并且不能够重复
3. 密码只能是数字和字母
4. Email是合法的并且不能够重复
5. 将符合要求的用户数据保存到文件中(user.xls)
1.2. 代码实现
用户注册.py
-
import os
-
import xlrd
-
import xlwt
-
import re
-
-
# from xlutils.copy import copy
-
-
filepath = "./users.xls"
-
-
-
def readUsers():
-
"""
-
读取excel中的文件并且将数据以列表的形式返回
-
:return: 列表
-
"""
-
# 检查文件是否存在
-
isFile = os.path.isfile(filepath)
-
if not isFile:
-
# 如果文件不存在,返回空的列表.意味着每个用户
-
return []
-
-
# 如果文件存在然后读取excel中的数据, 将每行数据放在一个字典中, 将所有行数据放在列表中
-
workbook = xlrd.open_workbook(filepath)
-
booksheet = workbook.sheet_by_index(0) # 得到第一个booksheet
-
nrows = booksheet.nrows # 得到里面的数据行数
-
-
rows = [] # 存放所有数据 将每行数据放在一个字典中, 将所有行数据放在列表中
-
"""
-
rows中的数据结构:
-
[{'username': 'admin', 'password': 'admin', 'email': 'admin@itsource.cn'},
-
{'username': 'zhangsan', 'password': 'zhangsan', 'email': 'zhangsan@itsource.cn'}]
-
"""
-
titles = ["username", "password", "email"] # 每行数据的键
-
for i in range(0, nrows):
-
# 根据excel中的行数循环出得到每行的数据
-
values = booksheet.row_values(i) # 得到每行数据
-
# 根据上面titles中提供数据的键与值生成一个字典
-
row = dict(zip(titles, values)) # 将每行数据的键值合并生成一个字典
-
-
# 将excel中的每行数据对应的字典放在rows中保存
-
rows.append(row) # 将每行数据放在rows中
-
-
return rows
-
-
-
def checkUsername(username):
-
# 去除两边空格
-
username = username.strip()
-
-
# 检查用户名的长度
-
length = len(username)
-
if length < 6 or length > 14:
-
print("用户名长度必须在6-14之间")
-
return False
-
-
# 检查用户名是否存在
-
rows = readUsers()
-
for row in rows:
-
if row['username'] == username:
-
print("用户名已经被占用,请更换用户名!")
-
return False
-
else:
-
return True
-
-
-
def checkPassword(password, repassword):
-
if not password.isalnum():
-
print("密码必须是数字或者字符串!")
-
return False
-
-
if password.strip() != repassword.strip():
-
print("密码和确认密码必须一致!")
-
return False
-
return True
-
-
-
def checkEmail(email):
-
email = email.strip()
-
if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None:
-
print("邮箱格式不正确")
-
return False
-
-
rows = readUsers()
-
for row in rows:
-
if row['email'] == email:
-
print("邮箱已经被占用,请更邮箱!")
-
return False
-
-
return True
-
-
-
def write_excel_data1(row):
-
"""
-
注册成功之后: 读取原Excel中的原来的所有数据, 再将新的数据放到原来的所有数据中.
-
再将所有数据重新保存到新的Excel中,覆盖原来的Excel
-
:param row:
-
:return:
-
"""
-
# 读取老的数据
-
rows = readUsers()
-
# 添加新的数据
-
rows.append(row)
-
-
# 将所有数据重新写入Excel覆盖原来的Excel
-
workbook = xlwt.Workbook()
-
sheet = workbook.add_sheet("用户信息", cell_overwrite_ok=True)
-
for i in range(0, len(rows)):
-
sheet.write(i, 0, rows[i]["username"])
-
sheet.write(i, 1, rows[i]["password"])
-
sheet.write(i, 2, rows[i]["email"])
-
workbook.save(filepath)
-
-
-
if __name__ == "__main__":
-
while True:
-
username = input("请输入用户名:")
-
password = input("请输入密码:")
-
repassword = input("请输入确认密码:")
-
email = input("请输入邮箱:")
-
-
# 检查用户名
-
result = checkUsername(username)
-
if not result:
-
continue
-
-
# 检查密码
-
result = checkPassword(password, repassword)
-
if not result:
-
continue
-
-
# 检查Email
-
result = checkEmail(email)
-
if not result:
-
continue
-
-
# 全部通过后准备将注册的信息保存到Excel中
-
row = {"username": username, "password": password, "email": email}
-
write_excel_data1(row)
-
print("注册成功")
-
break
1.3. 运行效果:
-
请输入用户名:zhangsan
-
请输入密码:zhangsan
-
请输入确认密码:zhangsan
-
请输入邮箱:zhangsan@itsource.cn
-
注册成功
2. 需求二:用户登录
2.1. 需求
1. 基于上一题的用户注册数据进行登陆
2. 如果输入错误三次就把用户名写入到一个文件(erroruser.xls)中. 该文件用来记录非法用户
3. 登陆成功之后将登陆成功的状态记录在status.txt文件中. yes表示登录的状态. no表示没有登陆的状态
- 登陆之后的文件内容:
status.txt中的内容:
yes
- 没有登陆或者登陆退出之后的文件内容:
status.txt中的内容:
no
2.2. 代码实现
用户登录.py
-
from data import readUsers
-
from data import myinput
-
import xlwt
-
-
# 记录登录次数
-
error_count = 0
-
-
while 1:
-
username = myinput("请输入用户名:")
-
password = myinput("请输入密码:")
-
-
# 得到users.xls中的所有数据
-
rows = readUsers()
-
-
# 用户名和密码与所有数据进行对比
-
for row in rows:
-
if row['username'] == username and row['password'] == password:
-
print("登录成功!")
-
error_count = 0
-
-
# 记录登录成功的标识
-
with open('./status.txt', 'w') as f:
-
f.write("yes")
-
-
# 登陆成功之后跳出循环
-
break
-
else:
-
print("登录失败!")
-
# 记录登录成功的标识
-
with open('./status.txt', 'w') as f:
-
f.write("yes")
-
-
# 登录次数+1
-
error_count += 1
-
if error_count >= 3:
-
workbook = xlwt.Workbook()
-
sheet = workbook.add_sheet("错误用户名")
-
sheet.write(0, 0, username)
-
workbook.save("./erroruser.xls")
data.py:
-
import os
-
import xlrd
-
-
filepath = "./users.xls"
-
-
-
def readUsers():
-
"""
-
读取excel中的文件并且将数据以列表的形式返回
-
:return: 列表
-
"""
-
# 检查文件是否存在
-
isFile = os.path.isfile(filepath)
-
if not isFile:
-
# 如果文件不存在,返回空的列表.意味着每个用户
-
return []
-
-
# 如果文件存在然后读取excel中的数据, 将每行数据放在一个字典中, 将所有行数据放在列表中
-
workbook = xlrd.open_workbook(filepath)
-
booksheet = workbook.sheet_by_index(0) # 得到第一个booksheet
-
nrows = booksheet.nrows # 得到里面的数据行数
-
-
rows = [] # 存放所有数据 将每行数据放在一个字典中, 将所有行数据放在列表中
-
"""
-
rows中的数据结构:
-
[{'username': 'admin', 'password': 'admin', 'email': 'admin@itsource.cn'},
-
{'username': 'zhangsan', 'password': 'zhangsan', 'email': 'zhangsan@itsource.cn'}]
-
"""
-
titles = ["username", "password", "email"] # 每行数据的键
-
for i in range(0, nrows):
-
# 根据excel中的行数循环出得到每行的数据
-
values = booksheet.row_values(i) # 得到每行数据
-
# 根据上面titles中提供数据的键与值生成一个字典
-
row = dict(zip(titles, values)) # 将每行数据的键值合并生成一个字典
-
-
# 将excel中的每行数据对应的字典放在rows中保存
-
rows.append(row) # 将每行数据放在rows中
-
-
return rows
-
-
-
def myinput(prompt=''):
-
"""
-
获取用户输入去除两边空格
-
:param prompt:
-
:return:
-
"""
-
return input(prompt).strip()
赞 0