python 装饰器模拟京东登陆
要求:
1、三个页面:主页面(home)、书店(book)、金融页面(finance)
2、有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录
2、输入:1 ,进入主页面,以此类推;输入:2 ,进入书店页面;输入:3 ,进入金融页面
3、进入页面时检测有没有登陆,如果没有调用登陆接口,使用账号密码登陆,在任何界面,只需登陆一次即可
4、账户信息保存在文件里
5、在任意界面,输入:Q ,退出程序
源代码:
login_status = False # 登录状态 with open('账户信息', 'r') as f_read_self: jingdong = f_read_self.readline().strip() jingdong = eval(jingdong) # 内置函数eval()的作用是把一个字符串转换为字典 for n, m in jingdong.items(): JD_name = n JD_pwd = m with open('账户信息(微信)', 'r') as f_read_wechat: wechat = f_read_wechat.readline().strip() wechat = eval(wechat) for n, m in wechat.items(): wechat_name = n wechat_pwd = m def login(auth_type="jingdong"): # 判断页面类型,默认进去是京东登录页面 def page(dis_play): global login_status # 声明全局变量 def login_type(): global login_status # 声明全局变量 if not login_status: # 如果是未登陆状态 if auth_type == "jingdong": username = input("Username:") passwd = input("Passwd:") if JD_name == username and JD_pwd == passwd: print("welcome ....") dis_play() # 登陆成功执行页面函数,显示内容 login_status = True # 改登陆状态为 True else: print("账户或密码错误,请重新输入") elif auth_type == "wechat": username = input("Username:") passwd = input("Passwd:") if wechat_name == username and wechat_pwd == passwd: print("welcome ....") dis_play() # 登陆成功执行页面函数,显示内容 login_status = True # 改登陆状态为 True else: print("账户或密码错误") else: print("已登陆") return login_type # 返回login_type 的内存地址,用于指向函数对象 return page @login() def home(): # 主页面 print("welcome to home page") @login() def book(): # 书店 print("welcome to home page") @login(auth_type="wechat") def finance(): # 金融 print("welcome to home page") while True: user_input = input('请输入:\n1: [主页] \n2: [书店] \n3: [金融] \nQ:退出') if user_input == '1': home() elif user_input == '2': book() elif user_input == '3': finance() elif user_input == 'Q': break
账户信息: {'Tom':'qwe123',}
账户信息(微信): {'Toms':'qwe123',}