python每日习题:封装鉴权装饰器

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python每日习题:封装鉴权装饰器相关的知识,希望对你有一定的参考价值。

题目:

1、编写一个鉴权装饰器,调用被装饰的函数时,需要校验用户是否登录,如果没有登录则需要输入账号,输入密码进行登录(默认正确的账号admin,密码123456)

要求:只要有一个函数调用时登录成功,后续的函数都无需再输入用户名和密码

思路提示:
1、设置一个全局变量来保存是否登录的状态,
2、在装饰器中通过判断状态来决定是否要输入账号密码进行登录(登录成功之后修改登录状态)

# 登录状态
status = {"status": False}


def login(func):

    def swapper(*args, **kwargs):
    	# 判断登录状态为 True, 则直接调用函数
        if status['status']:
            func(*args, **kwargs)
		
        else:
            username = input("请输入登录用户名:")
            password = str(input("请输入密码:"))
            # 否则输入用户名密码,如果正确,则更改原先的登录状态
            if username == 'admin' and password == '123456':
                status["status"] = True
                func(*args, **kwargs)
            else:
                print("账号或者密码错误,请重新输入!")
                # 如果账号密码错误,则调用自身,重新走登录逻辑
                swapper(*args, **kwargs)
    return swapper

@login
def test():
    print("这里是首页")

@login
def test2():
    print("现在下单哦~")

以上是关于python每日习题:封装鉴权装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

一文教你搞懂python函数装饰器(wrapper)

一文教你搞懂python函数装饰器(wrapper)

一文教你搞懂python函数装饰器(wrapper)

Python关于装饰器的练习题

Python__装饰器练习题