python 装饰器模拟京东登陆
2024-09-06 03:07:15
要求:
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',}
最新文章
- RegQueryValueEx正确使用方法
- 火狐浏览器如何js关闭窗口的几种解决方法
- Life of a triangle - NVIDIA's logical pipeline
- UICollectionViewCell选中高亮状态和UIButton的高亮状态和选中状态
- WPF控件
- winform让子窗体始终居于父窗体的中间
- apt系统中sources.list文件的解析
- <;%# Convert.ToDecimal(Eval(";IMLognum";)).ToString(";F0";) %>;
- leetcode 134. Gas Station ----- java
- (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道
- bzoj1053: [HAOI2007]反素数ant
- Android中的pix,sp,dp相关概念
- AutoAudit研究学习
- jquery 点击事件切换样式
- Java的两大数据类型
- SpringMVC之使用ResponseEntity,java接口返回HttpStatus
- BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
- python 在列表,元组,字典变量前加*号
- hdu 1.3.2 Moving Tables
- numpy中的reshape中参数为-1
热门文章
- Unity插值函数Lerp()与增量时间Time.deltatime
- 回文树1960. Palindromes and Super Abilities
- UVA - 1349 D - Optimal Bus Route Design
- Vue不兼容IE8原因以及Object.defineProperty详解
- vue+typescript入门学习
- 谷歌编码风格内容,新建一个xml文件,复制进去就可以在eclipse里面用了,命名--eclipse-java-google-style.xml
- 转--oracle查看允许的最大连接数和当前连接数等信息
- BZOJ1132: [POI2008]Tro(叉积 排序)
- Android性能分析工具Profile GPU rendering详细介绍
- Android利用融云做异地登录提醒