裝飾器中閉包之加認證功能

金融运维民工zhengkk發表於2024-07-07

類似京東商城,其實就是前端頁面加後端功能的集合,所謂的後端功能其實就是各種函式。

這裡所謂的認證,就是對於使用者名稱和密碼的一個校驗。廢話不多說,直接上需求,我們寫程式碼搞一下。
需求:
寫一段程式模擬京東商城,用裝飾器來實現認證功能。

程式碼如下:
name_list = [
{'name':'alex','pwd':'123'},
{'name':'jack','pwd':'456'},
{'name':'rose','pwd':'789'}
]
name_dict = {'login':False}
def auth_func(func):
def warpper(args,**kwargs):
if name_dict['login'] == True:
res = func(
args,kwargs)
return res
username = input('使用者名稱:')
pwd = input('密碼:')
for li in name_list:
if li['name'] == username and li['pwd'] == pwd:
name_dict['login'] = True
res = func(*args,
kwargs)
return res
else:
print('使用者名稱或密碼錯誤')
return warpper

@auth_func #等同於come = auth_func(come)
def come():
print('歡迎來到京東主頁')

@auth_func
def home(name):
print('歡迎%s回家' %name)

@auth_func
def shopping_car(commodity1,commodity2):
print('購物車裡有%s,還有%s,牛逼吧!' %(commodity1,commodity2))

if name == 'main':
come()
home('sb')
shopping_car('黃金','美女')

輸出結果:
使用者名稱:jack
密碼:456
歡迎來到京東主頁
歡迎sb回家
購物車裡有黃金,還有美女,牛逼吧!

上面程式碼的意思是如果輸入的使用者名稱和密碼剛好在密碼錶name_list中,說明登入成功。既然登入成功進入到了京東主頁,那麼進入自己的頁面和購物車就不需要再重複輸入使用者名稱和密碼了,即呼叫函式home()和shopping_car()無須再輸入密碼。

上面這個函式就是用了裝飾器實現登入功能,很牛逼吧!這才哪到哪,python牛逼的地方還多著呢,彆著急,我慢慢講給你聽。
好了,今天就到這裡吧!

相關文章