網站首頁 編程語言 正文
一、前言
在上一小節,我們介紹了文件的基本操作以及數據交換的格式,為了鞏固我們上一節文件操作的知識。
在這里我們做一個最基本的案例:用戶登錄
二、案例:用戶登錄
許多的應用都涉及數據的存儲和使用,作為存儲數據的基本形式,文件與應用密不可分。
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
相關推薦
- 2022-08-14 PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法_pytho
- 2022-03-24 Sublime?Text3安裝Go語言相關插件gosublime時搜不到gosublime的解決方法
- 2023-01-12 Python讀取mat(matlab數據文件)并實現畫圖_python
- 2022-07-13 Linux OS 運行python腳本中smtplib has no attribute SMTP_
- 2022-12-08 React源碼state計算流程和優先級實例解析_React
- 2022-10-27 C++移動語義介紹與使用講解_C 語言
- 2023-03-22 一文帶你學會Python?Flask框架設置響應頭_python
- 2023-06-18 c#關于非托管內存的釋放問題及解讀_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支