Python文件操作實(shí)戰(zhàn)案例之用戶登錄
一、前言
在上一小節(jié),我們介紹了文件的基本操作以及數(shù)據(jù)交換的格式,為了鞏固我們上一節(jié)文件操作的知識。
在這里我們做一個最基本的案例:用戶登錄
二、案例:用戶登錄
許多的應(yīng)用都涉及數(shù)據(jù)的存儲和使用,作為存儲數(shù)據(jù)的基本形式,文件與應(yīng)用密不可分。
1.案例分析
用戶登錄模塊可分為管理員和用戶登錄,若使用該軟件或?yàn)g覽器中,系統(tǒng)就會判斷用戶是否為首次使用:若是首次使用,則進(jìn)行初始化,否則進(jìn)入用戶類型選擇。若選擇管理員登錄,則直接登錄。如果是用戶,那么就給用戶提示是否需要注冊登錄。
根據(jù)以上分析,用戶管理模塊包含以下幾個文件
- 標(biāo)識位文件flag 用于檢測是否初次登錄,初識數(shù)據(jù)為0,首次啟動程序?yàn)閷⑵渲袛?shù)據(jù)修改為1
- 管理員賬戶文件u_root。用于保存管理員的賬戶信息
- 普通用戶賬戶文件。用于保存普通用戶注冊的賬戶。
2.程序設(shè)計(jì)
- main()程序的入口
- c_flag : 標(biāo)識位文件更改
- init 信息初始化
- print_login_menu 打印登錄菜單
- user_select 用戶選擇
- root_login 管理員登錄
- user_register 用戶注冊
- user_login 普通用戶登錄
2.1 main()
該函數(shù)是程序的入口,這里需要做的就是判斷是否是首次使用該系統(tǒng),保證讀取到的為同一個標(biāo)志位對象,這里將標(biāo)志位對象的數(shù)值存儲到文件flag中,每次啟動程序時都先調(diào)用main函數(shù) 該函數(shù)應(yīng)先打開flag文件,從其中讀取數(shù)據(jù)進(jìn)行判斷,根據(jù)表示文件的數(shù)據(jù)來進(jìn)行執(zhí)行不同的分支。
def main(): flag = open("flag") word = flag.read() if word == "0": print("首次登錄") flag.close() c_flag() #標(biāo)識為1 init() # 初始化 print_login_menu() #打印登錄菜單 user_select() # 選擇用戶 elif word == "1": #不是首次登錄 print("歡迎回來") print_login_menu() user_select() else: print("初始化異常...")
2.2 c_flag()
該函數(shù)用于修改flag文件中的內(nèi)容
def c_flag(): file = open("flag","w") file.write("1") file.close()
2.3 init()
初次啟動系統(tǒng)時,需要創(chuàng)建管理員賬戶和用戶文件
#3.初始化 創(chuàng)建管理員文件和普通用戶目錄 def init(): file = open("u_root","w") # 創(chuàng)建并打開管理員賬戶文件 root = {"username" : "root","pwd" : "123456"} file.write(str(root)) file.close() os.mkdir("users")
2.4 print_login_menu()
該函數(shù)用于打印菜單
2.5 user_select()
系統(tǒng)根據(jù)用戶輸入,選擇執(zhí)行不同的流程。
用戶輸入1 調(diào)用root_login函數(shù)進(jìn)行管理員登錄等等
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()
實(shí)現(xiàn)管理員登錄
def root_login(): while True: print("管理員登錄") root_user = input("請輸入賬戶:") root_pwd = input("請輸入密碼") file_root = open("u_root") #只讀的方式打開 root = eval(file_root.read()) #讀取賬戶信息 #信息校驗(yàn) if root_user == root["username"] and root_pwd == root["pwd"]: print("登錄成功") break else: print("校驗(yàn)失敗")
2.7 user_register()
用戶注冊函數(shù)
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") #創(chuàng)建用戶文件 file_user.write(str(user)) #寫入 file_user.close() #保存關(guān)閉
2.8 user_login()
實(shí)現(xiàn)用戶登錄函數(shù),校驗(yàn)文件中的數(shù)據(jù)和輸入的數(shù)據(jù)
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) #獲取文件內(nèi)容 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.功能演示
在程序目錄中創(chuàng)建flag文件,并在其中輸入0,保存退出,執(zhí)行程序
代碼匯總
import os #3.初始化 創(chuàng)建管理員文件和普通用戶目錄 def init(): file = open("u_root","w") # 創(chuàng)建并打開管理員賬戶文件 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()) #讀取賬戶信息 #信息校驗(yàn) if root_user == root["username"] and root_pwd == root["pwd"]: print("登錄成功") break else: print("校驗(yàn)失敗") #7.普通用戶注冊 在我們的分析當(dāng)中 沒有提前創(chuàng)建好文件用于保存用戶信息 所以需要注冊 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") #創(chuàng)建用戶文件 file_user.write(str(user)) #寫入 file_user.close() #保存關(guān)閉 #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) #獲取文件內(nèi)容 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文件中內(nèi)容 初次啟動系統(tǒng)被調(diào)用 def c_flag(): file = open("flag","w") file.write("1") file.close() # 1.#判斷是否為首次使用函數(shù) def main(): flag = open("flag") word = flag.read() if word == "0": print("首次登錄") flag.close() c_flag() #標(biāo)識為1 init() # 初始化 print_login_menu() #打印登錄菜單 user_select() # 選擇用戶 elif word == "1": #不是首次登錄 print("歡迎回來") print_login_menu() user_select() else: print("初始化異常...") if __name__ == "__main__": main()
總結(jié)
到此這篇關(guān)于Python文件操作實(shí)戰(zhàn)案例之用戶登錄的文章就介紹到這了,更多相關(guān)Python用戶登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python+matplotlib演示電偶極子實(shí)例代碼
這篇文章主要介紹了python+matplotlib演示電偶極子實(shí)例代碼,具有一定借鑒價值,需要的朋友可以參考下2018-01-01用pycharm開發(fā)django項(xiàng)目示例代碼
這篇文章主要介紹了用pycharm開發(fā)django項(xiàng)目示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Mac中PyCharm配置Anaconda環(huán)境的方法
這篇文章主要介紹了Mac中PyCharm配置Anaconda環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python數(shù)據(jù)合并的concat函數(shù)與merge函數(shù)詳解
大家都知道concat()函數(shù)可以沿著一條軸將多個對象進(jìn)行堆疊,其使用方式類似數(shù)據(jù)庫中的數(shù)據(jù)表合并,在使用merge()函數(shù)進(jìn)行合并時,默認(rèn)會使用重疊的列索引做為合并鍵,即取行索引重疊的部分,本文給大家介紹python?數(shù)據(jù)合并concat函數(shù)與merge函數(shù),感興趣的朋友一起看看吧2022-05-05Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法詳解
這篇文章主要介紹了Python3爬蟲學(xué)習(xí)之將爬取的信息保存到本地的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python3信息爬取、文件讀寫、圖片存儲等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12