日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python文件操作實戰案例之用戶登錄_python

作者:Philosophy7 ? 更新時間: 2022-07-25 編程語言

一、前言

在上一小節,我們介紹了文件的基本操作以及數據交換的格式,為了鞏固我們上一節文件操作的知識。

在這里我們做一個最基本的案例:用戶登錄

二、案例:用戶登錄

許多的應用都涉及數據的存儲和使用,作為存儲數據的基本形式,文件與應用密不可分。

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,保存退出,執行程序

代碼匯總

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

欄目分類
最近更新