python 3 装饰器 实现简单账户类别登陆不同页面

 

#当前目录存放jd_admin.txt 和 wx_admin.txt 分别写入两种账户的名称和密码,为了方便账号和密码用空格分开,仅一组数据以便读取

#启动页面展示page选项Home,Finace,Book
def start():
    start_list = ['Home','Finance','Book']
    for i,item in enumerate(start_list):
        print(i+1,".",item)

#登陆方式验证,读取存储的正确账号密码,返回结果以list的方式
def authentic(auth = 'jd'):
    if auth == 'jd':
        with open('jd_admin.txt','r',encoding='utf-8') as file:
            data = file.read()
            userdata_list=data.split(' ')
            return userdata_list
    else:
        with open ('wx_admin.txt','r',encoding='utf-8') as file:
            data = file.read()
            userdata_list = data.split(' ')
            return userdata_list
#登陆状态默认为False
login_status1 = False # 京东账户登陆状态
login_status2 = False #微信账户登陆状态
#装饰器函数,登陆检测和登陆执行
def login_check(login_status):
    def login(f):
        def login_inner(auth):
            if auth == 'jd':
                global login_status1
                if not login_status1:
                    print("您还没有登陆,请输入京东账户和密码进行登陆!")
                    userdata=authentic(auth)
                    userName = userdata[0]
                    passWd = userdata[1]
                    user= input("京东账户名>>:")
                    password = input("密码>>:")
                    if user == userName and password == passWd:
                        print("登陆成功!")
                        f(auth)
                        login_status1= True
                    else:
                        print("用户名或者密码错误")
                else:
                    f(auth)
            else:
                global login_status2
                if not login_status2:
                    print("该页面需要使用您的微信账户登陆,请输入微信账户和密码进行登陆!")
                    userdata = authentic(auth)
                    userName = userdata[0]
                    passWd = userdata[1]
                    user = input("微信号>>:")
                    password = input("密码>>:")
                    if user == userName and password == passWd:
                        print('登陆成功!')
                        f(auth)
                        login_status2 = True
                    else:
                        print("用户名或者密码错误!")
                else:
                    f(auth)
        return login_inner
    return login


@login_check(login_status1)
def Home(auth = 'jd'): # 京东账号登陆 auth = 'jd'
    print('Welcome to JingDong Home Page')

@login_check(login_status2)
def Finance(auth = 'wx'): #微信账号登陆 auth = 'wx'
    print('Welcome to Jingdong Finance Page')

@login_check(login_status1)
def Book(auth='jd'): #京东账号登陆  auth='jd'
    print('Welcome to JingDong Book Page')

#执行功能
while True:
    start() #显示首页
    page_id = input("Select the Page_ID>>:").strip()
    if page_id == 0: continue
    elif page_id.isdigit():
        page_id = int(page_id)
        if page_id == 1:
            Home(auth='jd')
            continue
        elif page_id == 2:
            Finance(auth='wx')
            continue
        elif page_id == 3:
            Book(auth='jd')
            continue
        else:
            print("输入页面ID不存在!请重新选择!")
    else:
        print("输入错误!请重新输入!")
实现效果
(该实现需要调整一下逻辑,这种方式貌似修改了原来的home(),finance(),book()的传入参数, 
不进行传入参数仅需要将登陆验证方式检测放在最外层函数进行传入,内层loggin_inner()不进行传入参数
账号密码存储用字典的键值对的形式更方便)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值