1. 程式人生 > >6月23 有關登錄認證的心得

6月23 有關登錄認證的心得

IE lose 過程 col info login page == 我們

  我們在創建一個系統時經常需要進行登錄認證,若在一個模塊實現登錄,則其他模塊無需再重復登錄,那麽怎樣實現這一功能呢,我們可以結

合裝飾器來完成,下面結合一個簡單的明星投票系統來簡述這一功能的實現。

  投票系統包含“註冊”“登錄”“票數顯示”“投票”及“退出”基本功能,第一步,我們先分別寫出實現五個這五個功能的函數。今天記錄用裝飾器實現認

證功能以,故此處“登錄”及“票數顯示”兩個模塊為例來說明。

技術分享圖片
 1 login_flag=False
 2 def wrapper(func):
 3     def inner(*args,**kwargs):
 4         global login_flag
5 if login_flag==True: 6 ret=func(*args,**kwargs) 7 return ret 8 else: 9 login() 10 ret = func(*args, **kwargs) 11 login_flag == True 12 return ret 13 return inner 14 15 def regester(): 16 flag=True
17 while flag: 18 username=input("請輸入你的賬戶名:").strip() 19 password=input("請輸入你的密碼").strip() 20 with open("user_info",mode="a+",encoding="utf_8")as f1: 21 for line in f1.readlines(): 22 if username in line: 23 print("此用戶名已使用,請更換註冊
") 24 break 25 else: 26 f1.write(username+","+password+"\n") 27 flag=False 28 29 def login(): 30 global login_flag 31 flag=True 32 while flag: 33 user=input("請輸入您的用戶名:").strip() 34 psd=input("請輸入你的密碼:").strip() 35 with open("user_info",encoding="utf-8")as f2: 36 for line in f2.readlines(): 37 username,password=line.strip().split(",") 38 if user==username and psd==password: 39 print("歡迎登錄!") 40 flag=False 41 login_flag=True 42 43 @wrapper 44 def poll_list(): 45 with open("star_msg",encoding="utf-8")as f3: 46 content=f3.read().strip() 47 print(content) 48 49 def choice(): 50 flag=True 51 while flag: 52 choose=input("****Welcome to the star voting system!****\n\t\t\t1.用戶註冊\n\t\t\t" 53 "2.用戶登錄\n\t\t\t3.明星排行榜""\n\t\t\t4.投票界面\n\t\t\t5.退出系統\n" 54 ">>>Please choose your page:").strip() 55 if choose=="1": 56 regester() 57 elif choose=="2": 58 login() 59 elif choose=="3": 60 poll_list() 61 elif choose=="4": 62 vote() 63 else: 64 logout() 65 flag=False 66 choice()
View Code

技術分享圖片

上圖是我寫的過程中發現註意的問題:

1.總還是忘了在裝飾器內部引用全局變量,造成裝飾其他函數時每運行一次都需要重復登錄,沒有達到模塊間相互認證的目的

2.判定未登陸的,在其執行完登錄操作後一定要改變一下全局變量,這樣才能對其他模塊關聯產生作用

6月23 有關登錄認證的心得