最近看了下Python,的确是一种语义简洁,且特别适合快速开发的语言,学习了这个语言的装饰器模式,想记录下自己的一点点感想:
虚拟业务场景: 假设有三个页面:home,finance,book三个函数,分别使用京东帐号,微信帐号,和普通帐号登录,现在三个页面已经正式上线使用,要求不修改调用代码的情况下,使用装饰器模式来为三个函数添加登录验证:
具体的代码块如下:
#__author: "hong liu"
#date: 2018-03-08
import json
login_status =False
# 把验证信息组装为字典
def analy_file(properties):
user_info = {}
if type(properties) ==list:
for linein properties:
if '=' in line:
platform,user_json = line.split('=')
platform = platform.strip()
user_json = json.loads(user_json.strip())
user_info[platform] = user_json
return user_info
# 通过装饰器模式来实现不修改工程代码的情况下添加登录验证
def auth(auth_type =''):
def login(func):
def inner(user_info):
if login_status ==False:
if auth_type =='jingdong':#验证类型为京东帐号
user_name =input('jingdong username:')
pass_word =input('jingdong password:')
if user_info['jingdong']['user_name'] == user_nameand user_info['jingdong']['pass_word'] == pass_word:
func()
else:
print('login jingdong fail')
if auth_type =='weixin':#验证类型为微信帐号
user_name =input('weixin username:')
pass_word =input('weixin password:')
if user_info['weixin']['user_name'] == user_nameand user_info['weixin']['pass_word'] == pass_word:
func()
else:
print('login weixin fail')
if auth_type =='':#普通帐号验证
user_name =input('username:')
pass_word =input('password:')
if user_info['customer']['user_name'] == user_nameand user_info['customer']['pass_word'] == pass_word:
func()
else:
print('login fail')
return inner
return login
#主页面,使用京东帐号登录
@auth(auth_type ='jingdong')
def home():
print('welcome to home page')
#财务专栏,使用微信帐号登录
@auth(auth_type ='weixin')
def finance():
print('welcome to finance page')
#书本页面,使用普通帐号登录
@auth(auth_type ='')
def book():
print('welcome to book page')
file_info = []
# 从文件中读取用户登录验证信息
with open('./user_info.txt','r',encoding='UTF-8')as f:
for linein f:
file_info.append(line.strip('\n'))
user_info = analy_file(file_info)
home(user_info) #最后调用home(user_info)会发现需要验证了