Python3带权限层级的用户注册登录功能实现咨询
我来帮你搞定这个带权限层级的用户系统,咱们一步步把功能补全,让它能正常跑起来~
完整实现方案:带权限层级的Python用户系统
一、完善你的登录函数
你写的登录逻辑已经有雏形了,咱们把它补全,还要加上一些鲁棒性处理(比如避免空行、格式错误的行导致报错):
def login(): print("\nYou're in login section") username = input("Username: ").strip() password = input("Password: ").strip() # 用with语句安全读取文件,自动关闭资源 try: with open("users.txt", "r") as f: for line in f: line = line.strip() # 跳过空行 if not line: continue # 分割每行信息,确保格式正确 login_info = line.split() if len(login_info) != 3: print(f"警告:文件中有格式错误的行:{line}") continue # 匹配用户名和密码 if username == login_info[0] and password == login_info[1]: print(f"登录成功!你的权限层级是:{login_info[2]}") # 返回权限层级,方便后续业务逻辑使用 return int(login_info[2]) # 循环结束没匹配到,说明登录失败 print("用户名或密码错误!") return None except FileNotFoundError: print("错误:用户文件不存在,请先注册用户!") return None
关键细节说明:
- 用
strip()去除输入的首尾空格,避免用户不小心输入空格导致匹配失败 with open(...)是Python操作文件的最佳实践,不用手动调用close(),防止资源泄漏- 增加了空行和格式错误行的处理,避免程序崩溃
- 登录成功后返回权限层级,这样你后续可以根据这个值判断用户能执行哪些操作
二、实现注册函数
接下来咱们写注册功能,要满足收集用户名、密码、权限层级,还要做必要的验证:
def register(): print("\nYou're in registration section") username = input("Enter username: ").strip() # 检查用户名是否为空 if not username: print("用户名不能为空!") return password = input("Enter password: ").strip() if not password: print("密码不能为空!") return # 验证权限层级只能是1或2 while True: level_input = input("Enter permission level (1 for client, 2 for admin): ").strip() if level_input in ["1", "2"]: permission_level = level_input break print("无效的权限层级!请输入1或2") # 检查用户名是否已存在 try: with open("users.txt", "r") as f: for line in f: line = line.strip() if not line: continue existing_user = line.split()[0] if existing_user == username: print("用户名已存在!请换一个用户名") return except FileNotFoundError: # 文件不存在说明是第一个注册用户,直接跳过检查 pass # 写入用户信息到文件 with open("users.txt", "a") as f: f.write(f"{username} {password} {permission_level}\n") print("注册成功!")
关键细节说明:
- 增加了用户名、密码非空验证,避免无效数据
- 循环验证权限层级,确保用户只能输入1或2
- 注册前检查用户名是否已存在,避免重复注册
- 用追加模式
"a"写入文件,不会覆盖已有用户数据
三、整合系统入口(主菜单)
最后咱们写一个主函数,让用户可以通过菜单选择操作:
def main(): while True: print("\n=== 用户系统菜单 ===") print("1. 注册") print("2. 登录") print("3. 退出") choice = input("请输入你的选择(1/2/3):").strip() if choice == "1": register() elif choice == "2": user_level = login() # 这里可以根据返回的权限层级添加后续逻辑,比如管理员专属操作 if user_level == 2: print("欢迎管理员,你可以执行所有操作!") elif user_level == 1: print("欢迎客户,你可以查看个人信息!") elif choice == "3": print("再见!") break else: print("无效选择,请重新输入!") if __name__ == "__main__": main()
四、优化建议(可选)
- 密码安全:目前是明文存储密码,生产环境建议用哈希算法加密,比如
bcrypt库,安装后可以对密码进行哈希存储,避免泄露 - 异常处理:可以在更多地方添加异常捕获(比如文件写入失败的情况),提升系统稳定性
- 数据格式:如果用户量较大,建议用JSON或者数据库存储用户信息,比纯文本文件更易维护
内容的提问来源于stack exchange,提问作者Nhmanas
相关产品推荐
相关产品推荐

