Python文件操作实战案例之用户登录

作者:Philosophy7 时间:2023-07-12 18:03:37 

一、前言

在上一小节,我们介绍了文件的基本操作以及数据交换的格式,为了巩固我们上一节文件操作的知识。

在这里我们做一个最基本的案例:用户登录

二、案例:用户登录

许多的应用都涉及数据的存储和使用,作为存储数据的基本形式,文件与应用密不可分。

1.案例分析

用户登录模块可分为管理员和用户登录,若使用该软件或浏览器中,系统就会判断用户是否为首次使用:若是首次使用,则进行初始化,否则进入用户类型选择。若选择管理员登录,则直接登录。如果是用户,那么就给用户提示是否需要注册登录。

根据以上分析,用户管理模块包含以下几个文件

  • 标识位文件flag 用于检测是否初次登录,初识数据为0,首次启动程序为将其中数据修改为1

  • 管理员账户文件u_root。用于保存管理员的账户信息

  • 普通用户账户文件。用于保存普通用户注册的账户。

2.程序设计

  • main()程序的入口

  • c_flag : 标识位文件更改

  • init 信息初始化

  • print_login_menu 打印登录菜单

  • user_select 用户选择

  • root_login 管理员登录

  • user_register 用户注册

  • user_login 普通用户登录

2.1 main()

该函数是程序的入口,这里需要做的就是判断是否是首次使用该系统,保证读取到的为同一个标志位对象,这里将标志位对象的数值存储到文件flag中,每次启动程序时都先调用main函数 该函数应先打开flag文件,从其中读取数据进行判断,根据表示文件的数据来进行执行不同的分支。

def main():
   flag = open("flag")
   word = flag.read()
   if word == "0":
       print("首次登录")
       flag.close()
       c_flag() #标识为1
       init() # 初始化
       print_login_menu() #打印登录菜单
       user_select() # 选择用户
   elif word == "1":
       #不是首次登录
       print("欢迎回来")
       print_login_menu()
       user_select()
   else:
       print("初始化异常...")

2.2 c_flag()

该函数用于修改flag文件中的内容

def c_flag():
   file = open("flag","w")
   file.write("1")
   file.close()

2.3 init()

初次启动系统时,需要创建管理员账户和用户文件

#3.初始化 创建管理员文件和普通用户目录
def init():
   file = open("u_root","w") # 创建并打开管理员账户文件
   root = {"username" : "root","pwd" : "123456"}
   file.write(str(root))
   file.close()
   os.mkdir("users")

2.4 print_login_menu()

该函数用于打印菜单

2.5 user_select()

系统根据用户输入,选择执行不同的流程。

用户输入1 调用root_login函数进行管理员登录等等

def user_select():
   while True:
       user_type_select = input("请输入选择用户类型:")
       if user_type_select == "1":
           root_login()
           break
       elif user_type_select == "2":
           while True:
               select = input("是否需要注册?(y/n)")
               if select == "y" or select == "Y":
                   print("---用户注册---")
                   user_register() # 用户注册
                   break
               elif select == "n" or select == "N":
                   print("用户登录")
                   break
               else:
                   print("输入有误 重新选择")
           user_login() #用户登录    
           break
       elif user_type_select == "0":
           return
       else:
           print("输入有误,请重新选择")

2.6 root_login()

实现管理员登录

def root_login():
   while True:
       print("管理员登录")
       root_user = input("请输入账户:")
       root_pwd = input("请输入密码")
       file_root = open("u_root") #只读的方式打开
       root = eval(file_root.read()) #读取账户信息
       #信息校验
       if root_user == root["username"] and root_pwd == root["pwd"]:
           print("登录成功")
           break
       else:
           print("校验失败")

2.7 user_register()

用户注册函数

def user_register():
   user_id = input("请输入用户名:")
   user_pwd = input("请输入密码")
   user_name = input("请输入昵称")
   user = {"u_id" : user_id,"u_pwd":user_pwd,"u_name":user_name}
   user_path = "./users" + user_id
   file_user = open(user_path,"w") #创建用户文件
   file_user.write(str(user)) #写入
   file_user.close() #保存关闭

2.8 user_login()

实现用户登录函数,校验文件中的数据和输入的数据

def user_login():
   while True:
       print("普通用户登录")
       user_id = input("请输入账户名:")
       user_pwd = input("请输入密码")
       #获取users目录下的所有文件
       user_list = os.listdir("./users")
       #遍历列表 判断user_id是否在列表中
       flag = 0
       for user in user_list:
           if user == user_id:
               flag = 1
               print("登录中....")
               #打开文件
               file_name = "./users" + user_id
               file_user = open(file_name)
               #获取文件内容
               user_info = eval(file_user.read())
               if user_pwd == user_info["u_pwd"]:
                   print("登录成功")
                   break
       if flag == 1:
           break
       elif flag == 0:
           print("没有该用户 请先注册")
           break

到这里用户登录案例就完成了

最后在程序中添加如下代码:

if __name__ == "__main__":
   main()

3.功能演示

在程序目录中创建flag文件,并在其中输入0,保存退出,执行程序

Python文件操作实战案例之用户登录

代码汇总

import os
#3.初始化 创建管理员文件和普通用户目录
def init():
   file = open("u_root","w") # 创建并打开管理员账户文件
   root = {"username" : "root","pwd" : "123456"}
   file.write(str(root))
   file.close()
   os.mkdir("users")

#4.打印登录菜单
def print_login_menu():
   print("-----用户选择-----")
   print("-----1.管理员登录-----")
   print("-----2.普通用户登录-----")
   print("-----0.退出-----")
   print("-"*30)
#6.管理员登录
def root_login():
   while True:
       print("管理员登录")
       root_user = input("请输入账户:")
       root_pwd = input("请输入密码")
       file_root = open("u_root") #只读的方式打开
       root = eval(file_root.read()) #读取账户信息
       #信息校验
       if root_user == root["username"] and root_pwd == root["pwd"]:
           print("登录成功")
           break
       else:
           print("校验失败")

#7.普通用户注册 在我们的分析当中 没有提前创建好文件用于保存用户信息 所以需要注册
def user_register():
   user_id = input("请输入账户id:")
   user_pwd = input("请输入密码")
   user_name = input("请输入用户名")
   user = {"u_id" : user_id,"u_pwd":user_pwd,"u_name":user_name}
   user_path = "./users/" + user_id
   file_user = open(user_path,"w") #创建用户文件
   file_user.write(str(user)) #写入
   file_user.close() #保存关闭

#8.用户注册完毕之后 登录用户
def user_login():
   while True:
       print("普通用户登录")
       user_id = input("请输入账户id:")
       user_pwd = input("请输入密码")
       #获取users目录下的所有文件
       user_list = os.listdir("./users")
       #遍历列表 判断user_id是否在列表中
       flag = 0
       for user in user_list:
           if user == user_id:
               flag = 1
               print("登录中....")
               #打开文件
               file_name = "./users/" + user_id
               file_user = open(file_name)
               #获取文件内容
               user_info = eval(file_user.read())
               if user_pwd == user_info["u_pwd"]:
                   print("登录成功")
                   break
       if flag == 1:
           break
       elif flag == 0:
           print("没有该用户 请先注册")
           break

def user_select():
   while True:
       user_type_select = input("请输入选择用户类型:")
       if user_type_select == "1":
           root_login()
           break
       elif user_type_select == "2":
           while True:
               select = input("是否需要注册?(y/n)")
               if select == "y" or select == "Y":
                   print("---用户注册---")
                   user_register()  #用户注册
                   break
               elif select == "n" or select == "N":
                   print("用户登录")
                   break
               else:
                   print("输入有误 重新选择")
           user_login() #用户登录    
           break
       elif user_type_select == "0":
           return
       else:
           print("输入有误,请重新选择")
#2.用于修改flag文件中内容 初次启动系统被调用
def c_flag():
   file = open("flag","w")
   file.write("1")
   file.close()

# 1.#判断是否为首次使用函数
def main():
   flag = open("flag")
   word = flag.read()
   if word == "0":
       print("首次登录")
       flag.close()
       c_flag() #标识为1
       init() # 初始化
       print_login_menu() #打印登录菜单
       user_select() # 选择用户
   elif word == "1":
       #不是首次登录
       print("欢迎回来")
       print_login_menu()
       user_select()
   else:
       print("初始化异常...")

if __name__ == "__main__":
   main()

来源:https://blog.csdn.net/ChengXuTeng/article/details/124540163

标签:python,用户,登录
0
投稿

猜你喜欢

  • Python(PyS60)实现简单语音整点报时

    2023-07-06 03:05:23
  • Python中使用dom模块生成XML文件示例

    2023-08-02 20:07:31
  • python在非root权限下的安装方法

    2023-12-05 20:28:35
  • JS点击图片弹出文件选择框并覆盖原图功能的实现代码

    2024-02-26 07:17:33
  • Python实现获取磁盘剩余空间的2种方法

    2023-11-20 23:53:29
  • 可以实现在同一页面里的用多按钮进行提交吗?

    2009-11-01 18:04:00
  • Python发展简史 Python来历

    2021-12-17 11:16:37
  • SQL LOADER错误小结

    2024-01-20 23:26:36
  • python解析yaml文件过程详解

    2023-09-30 13:13:51
  • JavaScript ES6 Class类实现原理详解

    2024-02-24 07:54:49
  • mysql存储过程实例

    2024-01-20 09:09:02
  • vue+element-ui+sortable.js实现表格拖拽功能

    2024-04-09 11:00:11
  • JS异步宏队列微队列原理详解

    2024-04-22 13:26:43
  • MySQL数据库如何导入导出(备份还原)

    2024-01-17 17:26:37
  • Python实现截屏的函数

    2022-03-12 01:46:53
  • ASP内置对象Request和Response用法详解

    2007-09-14 10:35:00
  • MySQL时间格式化date_format使用语法

    2024-01-23 07:31:36
  • 让IE6更快的走向灭亡

    2010-02-03 15:05:00
  • Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境过程(2020年最新攻略)

    2021-11-24 05:20:30
  • python基于paramiko库远程执行 SSH 命令,实现 sftp 下载文件

    2022-11-09 23:31:31
  • asp之家 网络编程 m.aspxhome.com