4.8 KiB
4.8 KiB
用户登录注册功能
需求
- 优化基于文件的用户管理系统,使用函数来编写功能
- 加上注册的功能,在程序运行的开始,让用户选择是登录和注册
- 如果选择的是登录功能,正常登录
- 如果选择的是注册功能,那就确保能够按照要求进行注册
- 不管用户选择了登录还是注册,都要在新的文件
logs
中进行记录,记录格式如下
2024-12-06 15:15:57 开始调用注册
2024-12-06 15:15:57 结束调用注册
2024-12-06 15:15:57 开始调用注册
2024-12-06 15:15:57 结束调用注册
2024-12-06 15:15:57 开始调用登录
2024-12-06 15:15:57 结束调用登录
2024-12-06 15:15:57 开始调用登录
2024-12-06 15:15:57 结束调用登录
- 用户登录成功后,可以查看当前用户的IP地址,使用闭包获取
参考代码
from datetime import datetime
from urllib.request import urlopen
def logs(msg):
# 记录到logs中
# 日期 时间 开始调用{msg}功能
# 日期 时间 结束调用{msg}功能
# 获取当前的时间,并且生成格式示例:2035-01-20 23:59:23
def warpper(func):
def inner(*args, **kwargs):
with open('logs', 'a') as f:
nowtime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
f.write(f"{nowtime} 开始调用{msg}\n")
ret = func(*args, **kwargs)
nowtime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
f.write(f"{nowtime} 结束调用{msg}\n")
return ret
return inner
return warpper
def get_db():
# 获取db文件中存储的用户信息
with open(db_file, 'a+', encoding="utf-8") as f:
# 移动光标到开头
f.seek(0)
# 逐行读取内容并且放入字典db中
for line in f:
# 将每一行的信息读取出来,依据|分割,临时存入temp_list中
temp_list = line.strip().split('|')
# 字典的key是用户名,值是密码
db[temp_list[0]] = temp_list[1]
def write_db():
# 将更新后的用户信息写回数据库文件
with open(db_file, "w", encoding="utf-8") as f:
for k, v in db.items():
data = f"{k}|{v}\n"
f.write(data)
def check_user(username):
# 检测用户是否存在
# 返回1,表示存在
# 返回0,表示不存在
if db.get(username, 0):
return 1
else:
return 0
@logs("登录")
def login(username, password):
# 接收用户名和密码
# 返回1,表示登录成功
# 返回0,表示登录失败
if db[username] == password:
return 1
else:
return 0
@logs("注册")
def register(username, password):
# 接收用户名和密码
# 返回1,表示注册成功
db[username] = password
write_db()
return 1
def get_ip():
# 打印用户当前的ip地址
content = urlopen('http://myip.ipip.net').read().decode('utf-8')
def inner():
print(content)
return inner
# 闭包函数
get_ip = get_ip()
def menu():
while True:
# 打印菜单,并且根据用户的输入来决定使用什么功能
print("请选择".center(20, '='))
print("1. 登录".center(20, ' '))
print("2. 注册".center(20, ' '))
print("=" * 22)
choice = input(">>>")
# 刷新数据库里面的信息
get_db()
# 根据用户选择来执行登录或者注册
if choice == '1':
# 登录的代码
username = input("用户名:")
if check_user(username):
# 当用户名存在的时候获取密码,并且进行用户校验
password = input("密码:")
if login(username, password):
print("登录成功!")
get_ip()
else:
print("密码不正确")
else:
print("用户名不存在")
elif choice == '2':
# 注册的代码
username = input("用户名:")
if check_user(username):
# 当用户名存在的时候
print("用户名已存在")
else:
password = input("密码:")
if register(username, password):
# 可以正确注册的时候
print("注册成功!")
else:
print("未知错误!")
else:
print("选择错误")
# 定义数据库文件的名字
db_file = "db"
# 定义空字典,用于临时存放数据库内容
db = {}
menu()
作业6.1提交的内容
- 理解程序的运行逻辑
- 程序运行成功的截图,单独发送给组长