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',}
python 装饰器模拟京东登陆的更多相关文章
- 一篇关于Python装饰器的博文
这是一篇关于python装饰器的博文 在学习python的过程中处处受阻,之前的学习中Python的装饰器学习了好几遍也没能真正的弄懂.这一次抓住视频猛啃了一波,就连python大佬讲解装饰器起来也需 ...
- Python装饰器与闭包
闭包是Python装饰器的基础.要理解闭包,先要了解Python中的变量作用域规则. 变量作用域规则 首先,在函数中是能访问全局变量的: >>> a = 'global var' & ...
- Python 装饰器执行顺序
Python 装饰器执行顺序 之前同事问到两个装饰器在代码中使用顺序不同会不会有什么问题,装饰器是对被装饰的函数做了一层包装,然后执行的时候执行了被包装后的函数,例如: def decorator_a ...
- python装饰器,迭代器,生成器,协程
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...
- (十)Python装饰器
装饰器:本质就是函数,功能是为其他函数添加附加功能. 两个原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 一个栗子 def test(): res = 0 for i in ra ...
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- python 装饰器修改调整函数参数
简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...
随机推荐
- Python标准库 os
(掌握os模块,你需要了解Linux或类Unix系统下常用命令的操作) os.name 指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' ...
- EF架构处理
1,edmx 从数据库更新模型-选中表-根据模型生成数据库 清理解决方案,重新生成解决方案
- AtCoder Beginner Contest 058 ABCD题
A - ι⊥l Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Three poles st ...
- April Fools Contest 2017 E
Description Input The input consists of four lines, each line containing a single digit 0 or 1. Outp ...
- Codeforces Round #295 (Div. 2) B. Two Buttons
B. Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Linux下mysql新建账号及权限设置各种方式总结
来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...
- HAL之EXIT
在STM32cubeMX中 1 在GPIO管脚上选定EXIT功能 2 在GPIO模式中设定触发边沿类型 3 在NVIC中设定NVIC分组及使能EIXT_Line0_interrupt 在MDK中的GP ...
- C#中构造函数和析构函数区别
把对象的初始化工作放在构造函数中,把清除工作放在析构函数中.当对象被创建时,构造函数被自动执行.当对象消亡时,析构函数被自动执行.这样就不用担心忘记对象的初始化和清除工作. 析构函数是由垃圾回收器控制 ...
- Android单独继承View类来实现自定义控件
一个单独继承view类来实现自定义控件,在该方法中,需要重写ondraw方法来绘制自己所需要的控件,下面也以一个简单的例子来说明如何实现自定义控件.该方法可以实现所需要的所有的自定义控件. 属性文件中 ...
- 通过HA方式操作HDFS
之前操作hdfs的时候,都是固定namenode的地址,然后去操作.这个时候就必须判断namenode的状态为active还是standby,比较繁琐,如果集群使用了HA的形式,就很方便了 直接上代码 ...