要求:

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 装饰器模拟京东登陆的更多相关文章

  1. 一篇关于Python装饰器的博文

    这是一篇关于python装饰器的博文 在学习python的过程中处处受阻,之前的学习中Python的装饰器学习了好几遍也没能真正的弄懂.这一次抓住视频猛啃了一波,就连python大佬讲解装饰器起来也需 ...

  2. Python装饰器与闭包

    闭包是Python装饰器的基础.要理解闭包,先要了解Python中的变量作用域规则. 变量作用域规则 首先,在函数中是能访问全局变量的: >>> a = 'global var' & ...

  3. Python 装饰器执行顺序

    Python 装饰器执行顺序 之前同事问到两个装饰器在代码中使用顺序不同会不会有什么问题,装饰器是对被装饰的函数做了一层包装,然后执行的时候执行了被包装后的函数,例如: def decorator_a ...

  4. python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出12 ...

  5. (十)Python装饰器

    装饰器:本质就是函数,功能是为其他函数添加附加功能. 两个原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 一个栗子 def test(): res = 0 for i in ra ...

  6. 关于python装饰器

    关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...

  7. python装饰器通俗易懂的解释!

    1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...

  8. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  9. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

随机推荐

  1. hdu1829&&poj2492 A Bug's Life 基础种类并查集

    把性别相同的虫子放在同一个集合,然后每读入一对虫子号,判断它们在不在同一集合,在则同性别,不在则继续 #include <cstdio> #include <cstring> ...

  2. AtCoder Grand Contest 008 D - K-th K

    题目传送门:https://agc008.contest.atcoder.jp/tasks/agc008_d 题目大意: 给你一个长度为\(N\)的序列\(A\),请你构造一个长度为\(N^2\)的序 ...

  3. April Fools Contest 2017 F

    Description You are developing a new feature for the website which sells airline tickets: being able ...

  4. BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领

    题目传送门 /* BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 注意:结果还要加上原来占领的 */ #include <cs ...

  5. luogu P3371 & P4779 单源最短路径spfa & 最大堆优化Dijkstra算法

    P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...

  6. word-wrap与word-break为长单词换行

    如果你遇到长串英文单词或者url换行的问题,这时候就需要用到word-wrap与word-break这2个css属性啦. word-wrap:break-word;长单词与url地址自动换行. wor ...

  7. MVC 下 ajax调用 日期差值计算

    背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...

  8. 2. UITest相关APIs

    1. XCUIApplication 这是你正在测试的应用的代理.它能让你启动应用,这样你就能执行测试了.它每次都会新起一个进程,这会多花一些时间,但是能保证测试应用时的状态是干净的,这样你需要处理的 ...

  9. python2和python3的区别(转)

    基本语法差异 核心类差异 Python3对Unicode字符的原生支持 Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3只支持uni ...

  10. python pandas 中 loc & iloc 用法区别

    转自:https://blog.csdn.net/qq_21840201/article/details/80725433 ### 随机生DataFrame 类型数据import pandas as ...