目录
  • 一、前言
  • 二、案例:用户登录
    • 1.案例分析
    • 2.程序设计
      • 2.1 main()
      • 2.2 c_flag()
      • 2.3 init()
      • 2.4 print_login_menu()
      • 2.5 user_select()
      • 2.6 root_login()
      • 2.7 user_register()
      • 2.8 user_login()
    • 3.功能演示
    • 总结

      一、前言

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

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

      二、案例:用户登录

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

      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()
      

      总结

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。