You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:44:15