1. 程式人生 > >Python隨心記--函式閉包為函式加上認證功能

Python隨心記--函式閉包為函式加上認證功能

函式閉包為函式加上認證功能
def auth_func(func):
    def wrapper(*args,**kwargs):
        user_name = input('使用者名稱:').strip()
        user_pass = input('密  碼:').strip()
        if user_name == 'achun' and user_pass == 77770000:
            ret = func(*args,**kwargs)
            return ret
        else:
            
print('賬戶或密碼錯誤!') return wrapper @auth_func def index(): print('歡迎來到京東') @auth_func def home(name): print('歡迎%s回家' %name) @auth_func def shopping_car(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) index() home('achun') shopping_car('奶茶','籃球','褲子')
函式閉包模擬session  目前知識:全域性變數
user_list = [
    {'user':'alex','pass':'123456'},   #這裡注意資料型別
    {'user':'async','pass':'123456'},
    {'user':'lauencess','pass':'123456'}
]
current_dic= {'user':None,'login':False}
def auth_func(func):
    def wrapper(*args,**kwargs):
        if current_dic['user'] and current_dic['login']:
            ret 
= func(*args, **kwargs) return ret username = input('使用者名稱:').strip() userpass = input('密 碼:').strip() for user_dic in user_list: if username == user_dic['user'] and userpass == user_dic['pass']: ret = func(*args,**kwargs) current_dic['user'] = username current_dic['login'] = True return ret else:#若整個迴圈都未找到對應的賬戶和密碼將會退出 print('賬戶或密碼錯誤!') return wrapper @auth_func def index(): print('歡迎來到京東') @auth_func def home(name): print('歡迎%s回家' %name) @auth_func def shopping_car(name,names,namess): print('購物車的東西【%s,%s,%s】' %(name,names,namess)) index() home('achun') shopping_car('奶茶','籃球','褲子')
函式閉包帶引數裝飾器  新增應用場景
user_list = [
    {'user':'alex','pass':'123456'},   #這裡注意資料型別
    {'user':'async','pass':'123456'},
    {'user':'lauencess','pass':'123456'}
]
current_dic= {'user':None,'login':False}
def auth( auth_type = 'filedb'):   #可以傳一個場景
    def auth_func(func):
        def wrapper(*args, **kwargs):
            #print('場景是%s' %auth_type)
            if auth_type == 'filedb':
                if current_dic['user'] and current_dic['login']:
                    ret = func(*args, **kwargs)
                    return ret
                username = input('使用者名稱:').strip()
                userpass = input('密  碼:').strip()
                for user_dic in user_list:
                    if username == user_dic['user'] and userpass == user_dic['pass']:
                        ret = func(*args, **kwargs)
                        current_dic['user'] = username
                        current_dic['login'] = True
                        return ret
                else:  # 若整個迴圈都未找到對應的賬戶和密碼將會退出
                    print('賬戶或密碼錯誤!')
            elif auth_type == 'Mongodb':
                print('這裡執行另外的操作')
            else:
                print('這裡執行另外的操作')
        return wrapper
    return auth_func
@auth(auth_type = 'filedb')   #auth_func = auth(auth_type = 'filedb')
def index():
    print('歡迎來到京東')
@auth(auth_type = 'Mongodb')   #auth_func = auth(auth_type = 'filedb')
def home(name):
    print('歡迎%s回家' %name)
@auth(auth_type = 'Redis')   #auth_func = auth(auth_type = 'filedb')
def shopping_car(name,names,namess):
    print('購物車的東西【%s,%s,%s】' %(name,names,namess))
@auth(auth_type = 'Memcached')   #auth_func = auth(auth_type = 'filedb')
def detailed_list(name,names,namess):
    print('購物車的東西【%s,%s,%s】' %(name,names,namess))
index()
home('achun')
shopping_car('奶茶','籃球','褲子')