Python之路,装饰器模式模拟页面登录

最近看了下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)会发现需要验证了

你可能感兴趣的:(Python之路,装饰器模式模拟页面登录)