編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,后續的函數都無需再輸入用戶名和密碼


小猿圈作業:

  • 編寫裝飾器,為多個函數加上認證的功能(用戶的賬號密碼來源於文件),要求登錄成功一次,后續的函數都無需再輸入用戶名和密碼

  • 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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM