小猿圈作業: 編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼 tip:account文件的格式 1 dadada 123456 2 da da 3 da1 da 4 da2 1234 5 da3 1111 編寫裝飾器,為多個函數 ...
小猿圈作業:
-
編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼
- tip:account文件的格式
-
1 dadada 123456 2 da da 3 da1 da 4 da2 1234 5 da3 1111
1 # @Time :2019/7/2 21:38 2 3 ''' 4 編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件), 5 要求登錄成功一次,後續的函數都無需再輸入用戶名和密碼 6 ''' 7 account_status = False #用於判斷是否已經通過驗證 8 9 def login(func): 10 account_dict = {} #賬號密碼驗證用的,可以換其他方式驗證 賬號當做key,密碼當做value 11 def inner(): 12 global account_status 13 14 if not account_status : 15 with open('account',encoding='utf-8') as f: 16 account_data = f.read().split('\n') 17 for item in account_data: 18 user, pwd= item.split() 19 account_dict.setdefault(user,pwd) 20 21 username = input("username>>>: ").strip() 22 # username = 'da' 23 password = input("password>>>: ").strip() 24 # password = 'da' 25 #驗證輸入的賬號是否在account_dict已存在 26 #用.__contains__方法 是為了輸入的用戶名不存在,然後報 key不存在的錯誤 27 if account_dict.__contains__(username) and account_dict[username] == password: 28 account_status = True #修改用戶登錄狀態 29 print("登陸中~~~".center(50)) 30 func()#執行傳入的函數 31 else: 32 print('賬號密碼不匹配') 33 34 else: 35 print('已通過驗證'.center(50)) 36 func() 37 38 return inner 39 40 @login 41 def movies(): 42 print('--電影專區--') 43 44 @login 45 def articles(): 46 print('--小說專區--') 47 48 @login 49 def music(): 50 print('--歌曲專區--') 51 52 movies() 53 articles() 54 music()