【Python】用户登录 (数据读写,目录、文件路径)

文章描述了一个Python实现的用户登录系统,包括管理员和普通用户登录。系统首次启动时会检查是否为初次使用,如果是,则进行初始化。管理员账户是预设的,而普通用户可以通过注册功能创建账户。用户可以选择登录或注册,登录时会验证用户名和密码。
摘要由CSDN通过智能技术生成

用户登录

登录系统通常分为普通用户与管理员权限,在用户登录系统时,可以根据自身权限进行选择登录。本任务要求实现一个用户登录的程序,该程序分为管理员用户与普通用户,其中管理员账号密码在程序中设定,普通用户的账号与密码通过注册功能添加。

任务目标

  1. 熟练地读取和写入数据
  2. 掌握目录与文件路径操作

任务分析

用户登录模块分为管理员登录和普通用户登录,在用户使用软件时,系统会先判断用户是否为首次使用:若是首次使用,则进行初始化,否则进入用户类型选择。用户类型分为管理员和普通用户两种,若选择管理员,则直接进行登录;若选择普通用户,先询问用户是否需要注册,若需要注册,先注册用户再进行登录。用户登录模块的具体流程如图1所示。

用户登录流程图

用户登录模块包含的文件有:

(需预先创建)

  1. 标识位文件flag.txt。
  2. 管理员账户文件u_root.txt。
  3. 普通用户账户文件。

标识位文件用于检测是否为初次使用系统,其中的初始数据为0,在首次启动系统后将其数据修改为1;管理员账户文件用于保存管理员的账户信息,该账户在程序中设置,管理员账户唯一;普通用户文件用于保存普通用户注册的账户,每个用户对应一个账户文件,普通用户账户被统一存储于普通用户文件夹users中。

实现用户登录模块可以编写如下函数实现:

  1. is_first_start():判断是否首次使用系统;
  2. init():数据初始化;
  3. print_login_menu():打印登陆菜单;
  4. user_select():用户选择;
  5. root_login():管理员登陆;
  6. user_register():用户注册;
  7. user_login():普通用户登陆。

代码如下 

import os


# 判断是否首次使用系统
def is_first_start():
    if not os.path.exists('../flag.txt'):
        with open('../flag.txt', 'w') as f:
            f.write('0')
        return True
    else:
        with open('../flag.txt', 'r') as f:
            flag = f.read()
        return flag == '0'


# 数据初始化
def init():
    # 初始化管理员账户
    if not os.path.exists('../u_root.txt'):
        with open('../u_root.txt', 'w') as f:
            f.write('root:123456')
    # 初始化普通用户文件夹
    if not os.path.exists('users'):
        os.mkdir('users')  # 创建目录
    # 修改标识位
    with open('../flag.txt', 'w') as f:
        f.write('1')


# 打印登陆菜单
def print_login_menu():
    print('请选择用户类型:')
    print('1. 管理员')
    print('2. 普通用户')


# 用户选择
def user_select():
    choice = input('请输入选项(1或2):')
    while choice != '1' and choice != '2':
        choice = input('输入有误,请重新输入选项(1或2):')
    return choice


# 管理员登录
def root_login():
    with open('../u_root.txt', 'r') as f:
        root_info = f.read().split(':')  # 以列表形式返回
    root_name = root_info[0]
    root_pwd = root_info[1]
    count = 3  # 三次登录机会
    while count > 0:
        name = input('请输入管理员账号:')
        pwd = input('请输入管理员密码:')
        if name == root_name and pwd == root_pwd:
            print('管理员登录成功!')
            return True
        else:
            count -= 1
            print(f'账号或密码错误,还有{count}次机会。')
    print('登录失败!')
    return False


# 用户注册
def user_register():
    name = input('请输入用户名:')
    pwd = input('请输入密码:')
    # 判断用户名是否已存在
    if os.path.exists(f'users/{name}.txt'):
        print('用户名已存在,请重新输入。')
        return False
    # 创建用户账户文件
    with open(f'users/{name}.txt', 'w') as f:
        f.write(f'{name}:{pwd}')
    print('用户注册成功!')
    return True


# 普通用户登录
def user_login():
    name = input('请输入用户名:')
    pwd = input('请输入密码:')
    # 判断用户名是否存在
    if not os.path.exists(f'users/{name}.txt'):
        print('用户名不存在,请重新输入。')
        return False
    # 验证密码
    with open(f'users/{name}.txt', 'r') as f:
        user_info = f.read().split(':')
    if user_info[1] == pwd:
        print('用户登录成功!')
        return True
    else:
        print('密码错误,请重新输入。')
        return False


if __name__ == '__main__':
    if is_first_start():
        init()
    print_login_menu()
    choice = user_select()
    if choice == '1':
        root_login()
    else:
        register_choice = input('是否需要注册?(yes/no)')
        if register_choice.lower() == 'yes':
            user_register()
        user_login()

运行结果

请选择用户类型:
1. 管理员
2. 普通用户
请输入选项(1或2):2
是否需要注册?(yes/no)yes
请输入用户名:Elysia
请输入密码:123456
用户注册成功!
请输入用户名:Elysia
请输入密码:123456
用户登录成功!

Process finished with exit code 0

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值