1. 程式人生 > >Python基礎-----帶參數驗證功能的裝飾器

Python基礎-----帶參數驗證功能的裝飾器

return 購物車 主頁 登錄驗證 user_list 進行 根據 wrapper 字符串

#帶參數,可以根據不同的認證類型進行認證

user_list = [
{‘name‘:‘a‘,‘password‘:‘123‘},
{‘name‘:‘b‘,‘password‘:‘123‘},
{‘name‘:‘c‘,‘password‘:‘123‘},
{‘name‘:‘d‘,‘password‘:‘123‘}
] #所有用戶信息列表(值為字符串類型)

current_user = {‘username‘:None,‘login‘:False} #記錄用戶當前登錄狀態

def auth(auth_type = ‘filedb‘): #最外層閉包函數傳入驗證類型auth_type
def auth_func(func):
def wrapper(*args,**kwargs):
print(‘認證類型是:‘,auth_type)
if auth_type == ‘filedb‘: #用阿裏判斷是何種認證類型
if current_user[‘username‘] and current_user[‘login‘]: #如果已經登錄,則無需登陸
res = func(*args,**kwargs)
return res
username = input(‘用戶名:‘).strip() #上面if不成立,則登錄
password = input(‘密碼:‘).strip()
for user_dic in user_list: #for遍歷的是用戶列表的中用戶信息字典
if username == user_dic[‘name‘] and password == user_dic[‘password‘]: #登錄驗證
current_user[‘username‘] = username #登錄成功,更改用戶狀態
current_user[‘login‘] = True
res = func(*args,**kwargs)
return res
else: #該處else沒放在if下是因為,要遍歷所有的用戶列表才能判斷是否真的有錯
print(‘用戶名或密碼錯誤,請重新登錄!‘)
elif auth_type == ‘ladb‘:
print(‘認證類型是:‘,auth_type)
res = func(*args,**kwargs)
return res
return wrapper
return auth_func

@auth(auth_type = ‘filedb‘) #auth_func = auth(auth_type = ‘filedb‘) --> @auth_func,給他附加了參數
def home(name):
print(‘歡迎 %s 來到主頁‘%name)

@auth(auth_type = ‘ladb‘)
def shopping_car(name):
print(‘%s 的購物車裏有:學習用品,生活用品!‘%name)

home(‘Jerry‘)
print(current_user)
shopping_car(‘Jerry‘)

Python基礎-----帶參數驗證功能的裝飾器