Python文件操作實(shí)戰(zhàn)案例之用戶(hù)登錄
一、前言
在上一小節(jié),我們介紹了文件的基本操作以及數(shù)據(jù)交換的格式,為了鞏固我們上一節(jié)文件操作的知識(shí)。
在這里我們做一個(gè)最基本的案例:用戶(hù)登錄
二、案例:用戶(hù)登錄
許多的應(yīng)用都涉及數(shù)據(jù)的存儲(chǔ)和使用,作為存儲(chǔ)數(shù)據(jù)的基本形式,文件與應(yīng)用密不可分。
1.案例分析
用戶(hù)登錄模塊可分為管理員和用戶(hù)登錄,若使用該軟件或?yàn)g覽器中,系統(tǒng)就會(huì)判斷用戶(hù)是否為首次使用:若是首次使用,則進(jìn)行初始化,否則進(jìn)入用戶(hù)類(lèi)型選擇。若選擇管理員登錄,則直接登錄。如果是用戶(hù),那么就給用戶(hù)提示是否需要注冊(cè)登錄。
根據(jù)以上分析,用戶(hù)管理模塊包含以下幾個(gè)文件
- 標(biāo)識(shí)位文件flag 用于檢測(cè)是否初次登錄,初識(shí)數(shù)據(jù)為0,首次啟動(dòng)程序?yàn)閷⑵渲袛?shù)據(jù)修改為1
- 管理員賬戶(hù)文件u_root。用于保存管理員的賬戶(hù)信息
- 普通用戶(hù)賬戶(hù)文件。用于保存普通用戶(hù)注冊(cè)的賬戶(hù)。
2.程序設(shè)計(jì)
- main()程序的入口
- c_flag : 標(biāo)識(shí)位文件更改
- init 信息初始化
- print_login_menu 打印登錄菜單
- user_select 用戶(hù)選擇
- root_login 管理員登錄
- user_register 用戶(hù)注冊(cè)
- user_login 普通用戶(hù)登錄
2.1 main()
該函數(shù)是程序的入口,這里需要做的就是判斷是否是首次使用該系統(tǒng),保證讀取到的為同一個(gè)標(biāo)志位對(duì)象,這里將標(biāo)志位對(duì)象的數(shù)值存儲(chǔ)到文件flag中,每次啟動(dòng)程序時(shí)都先調(diào)用main函數(shù) 該函數(shù)應(yīng)先打開(kāi)flag文件,從其中讀取數(shù)據(jù)進(jìn)行判斷,根據(jù)表示文件的數(shù)據(jù)來(lái)進(jìn)行執(zhí)行不同的分支。
def main():
flag = open("flag")
word = flag.read()
if word == "0":
print("首次登錄")
flag.close()
c_flag() #標(biāo)識(shí)為1
init() # 初始化
print_login_menu() #打印登錄菜單
user_select() # 選擇用戶(hù)
elif word == "1":
#不是首次登錄
print("歡迎回來(lái)")
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()
初次啟動(dòng)系統(tǒng)時(shí),需要?jiǎng)?chuàng)建管理員賬戶(hù)和用戶(hù)文件
#3.初始化 創(chuàng)建管理員文件和普通用戶(hù)目錄
def init():
file = open("u_root","w") # 創(chuàng)建并打開(kāi)管理員賬戶(hù)文件
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ù)用戶(hù)輸入,選擇執(zhí)行不同的流程。
用戶(hù)輸入1 調(diào)用root_login函數(shù)進(jìn)行管理員登錄等等
def user_select():
while True:
user_type_select = input("請(qǐng)輸入選擇用戶(hù)類(lèi)型:")
if user_type_select == "1":
root_login()
break
elif user_type_select == "2":
while True:
select = input("是否需要注冊(cè)?(y/n)")
if select == "y" or select == "Y":
print("---用戶(hù)注冊(cè)---")
user_register() # 用戶(hù)注冊(cè)
break
elif select == "n" or select == "N":
print("用戶(hù)登錄")
break
else:
print("輸入有誤 重新選擇")
user_login() #用戶(hù)登錄
break
elif user_type_select == "0":
return
else:
print("輸入有誤,請(qǐng)重新選擇")
2.6 root_login()
實(shí)現(xiàn)管理員登錄
def root_login():
while True:
print("管理員登錄")
root_user = input("請(qǐng)輸入賬戶(hù):")
root_pwd = input("請(qǐng)輸入密碼")
file_root = open("u_root") #只讀的方式打開(kāi)
root = eval(file_root.read()) #讀取賬戶(hù)信息
#信息校驗(yàn)
if root_user == root["username"] and root_pwd == root["pwd"]:
print("登錄成功")
break
else:
print("校驗(yàn)失敗")
2.7 user_register()
用戶(hù)注冊(cè)函數(shù)
def user_register():
user_id = input("請(qǐng)輸入用戶(hù)名:")
user_pwd = input("請(qǐng)輸入密碼")
user_name = input("請(qǐng)輸入昵稱(chēng)")
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)建用戶(hù)文件
file_user.write(str(user)) #寫(xiě)入
file_user.close() #保存關(guān)閉
2.8 user_login()
實(shí)現(xiàn)用戶(hù)登錄函數(shù),校驗(yàn)文件中的數(shù)據(jù)和輸入的數(shù)據(jù)
def user_login():
while True:
print("普通用戶(hù)登錄")
user_id = input("請(qǐng)輸入賬戶(hù)名:")
user_pwd = input("請(qǐng)輸入密碼")
#獲取users目錄下的所有文件
user_list = os.listdir("./users")
#遍歷列表 判斷user_id是否在列表中
flag = 0
for user in user_list:
if user == user_id:
flag = 1
print("登錄中....")
#打開(kāi)文件
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("沒(méi)有該用戶(hù) 請(qǐng)先注冊(cè)")
break
到這里用戶(hù)登錄案例就完成了
最后在程序中添加如下代碼:
if __name__ == "__main__":
main()
3.功能演示
在程序目錄中創(chuàng)建flag文件,并在其中輸入0,保存退出,執(zhí)行程序

代碼匯總
import os
#3.初始化 創(chuàng)建管理員文件和普通用戶(hù)目錄
def init():
file = open("u_root","w") # 創(chuàng)建并打開(kāi)管理員賬戶(hù)文件
root = {"username" : "root","pwd" : "123456"}
file.write(str(root))
file.close()
os.mkdir("users")
#4.打印登錄菜單
def print_login_menu():
print("-----用戶(hù)選擇-----")
print("-----1.管理員登錄-----")
print("-----2.普通用戶(hù)登錄-----")
print("-----0.退出-----")
print("-"*30)
#6.管理員登錄
def root_login():
while True:
print("管理員登錄")
root_user = input("請(qǐng)輸入賬戶(hù):")
root_pwd = input("請(qǐng)輸入密碼")
file_root = open("u_root") #只讀的方式打開(kāi)
root = eval(file_root.read()) #讀取賬戶(hù)信息
#信息校驗(yàn)
if root_user == root["username"] and root_pwd == root["pwd"]:
print("登錄成功")
break
else:
print("校驗(yàn)失敗")
#7.普通用戶(hù)注冊(cè) 在我們的分析當(dāng)中 沒(méi)有提前創(chuàng)建好文件用于保存用戶(hù)信息 所以需要注冊(cè)
def user_register():
user_id = input("請(qǐng)輸入賬戶(hù)id:")
user_pwd = input("請(qǐng)輸入密碼")
user_name = input("請(qǐng)輸入用戶(hù)名")
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)建用戶(hù)文件
file_user.write(str(user)) #寫(xiě)入
file_user.close() #保存關(guān)閉
#8.用戶(hù)注冊(cè)完畢之后 登錄用戶(hù)
def user_login():
while True:
print("普通用戶(hù)登錄")
user_id = input("請(qǐng)輸入賬戶(hù)id:")
user_pwd = input("請(qǐng)輸入密碼")
#獲取users目錄下的所有文件
user_list = os.listdir("./users")
#遍歷列表 判斷user_id是否在列表中
flag = 0
for user in user_list:
if user == user_id:
flag = 1
print("登錄中....")
#打開(kāi)文件
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("沒(méi)有該用戶(hù) 請(qǐng)先注冊(cè)")
break
def user_select():
while True:
user_type_select = input("請(qǐng)輸入選擇用戶(hù)類(lèi)型:")
if user_type_select == "1":
root_login()
break
elif user_type_select == "2":
while True:
select = input("是否需要注冊(cè)?(y/n)")
if select == "y" or select == "Y":
print("---用戶(hù)注冊(cè)---")
user_register() #用戶(hù)注冊(cè)
break
elif select == "n" or select == "N":
print("用戶(hù)登錄")
break
else:
print("輸入有誤 重新選擇")
user_login() #用戶(hù)登錄
break
elif user_type_select == "0":
return
else:
print("輸入有誤,請(qǐng)重新選擇")
#2.用于修改flag文件中內(nèi)容 初次啟動(dòng)系統(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)識(shí)為1
init() # 初始化
print_login_menu() #打印登錄菜單
user_select() # 選擇用戶(hù)
elif word == "1":
#不是首次登錄
print("歡迎回來(lái)")
print_login_menu()
user_select()
else:
print("初始化異常...")
if __name__ == "__main__":
main()
總結(jié)
到此這篇關(guān)于Python文件操作實(shí)戰(zhàn)案例之用戶(hù)登錄的文章就介紹到這了,更多相關(guān)Python用戶(hù)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
開(kāi)源Web應(yīng)用框架Django圖文教程
Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。下面我們來(lái)一步步學(xué)習(xí)下吧2017-03-03
使用python實(shí)現(xiàn)壓縮PDF文件大小的方法
壓縮 PDF 文件能有效減小文件大小并提高文件傳輸?shù)男?同時(shí)還能節(jié)省計(jì)算機(jī)存儲(chǔ)空間,除了使用一些專(zhuān)業(yè)工具對(duì)PDF文件進(jìn)行壓縮,我們還可以通過(guò) Python 來(lái)執(zhí)行該操作,本文將分享一個(gè)簡(jiǎn)單有效的使用 Python 壓縮 PDF 文件的方法,需要的朋友可以參考下2024-06-06
Python自定義主從分布式架構(gòu)實(shí)例分析
這篇文章主要介紹了Python自定義主從分布式架構(gòu),結(jié)合實(shí)例形式分析了主從分布式架構(gòu)的結(jié)構(gòu)、原理與具體的代碼實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-09-09
python 尋找優(yōu)化使成本函數(shù)最小的最優(yōu)解的方法
這篇文章主要介紹了python 尋找優(yōu)化使成本函數(shù)最小的最優(yōu)解的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
python解決報(bào)錯(cuò)ImportError: Bad git executable.問(wèn)題
這篇文章主要介紹了python解決報(bào)錯(cuò)ImportError: Bad git executable.問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
pycharm中報(bào)ModuleNotFoundError:No?module?named?'tensor
這篇文章主要給大家介紹了關(guān)于pycharm中報(bào)ModuleNotFoundError:No?module?named?'tensorflow'錯(cuò)誤的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Python matplotlib繪制xkcd動(dòng)漫風(fēng)格的圖表
xkcd是蘭道爾·門(mén)羅(Randall Munroe)的網(wǎng)名,又是他所創(chuàng)作的漫畫(huà)的名稱(chēng)。本文將用matplotlib庫(kù)繪制xkcd動(dòng)漫風(fēng)格的圖表,感興趣的可以了解一下2022-03-03
Flaks基礎(chǔ)之在URL中添加變量的實(shí)現(xiàn)詳解
這篇文章主要介紹了在python開(kāi)發(fā)中,F(xiàn)laks框架之上在URL鏈接中添加變量的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09

