怎么用装饰器实现如下功能?如何在装饰函数里判断被装饰函数里的登录状态是否实现了?
方法很多种,我只是提供参考
代码实现如下
def loginchack(func):
def _loginchack(request, *args, **kwargs):
global loginmark
if loginmark:
return func(request, *args, **kwargs)
else:
print('请先登录')
if login():
loginmark=True
return func(request, *args, **kwargs)
else:
print('登陆失败')
return None
return _loginchack
def menu():
print('1.增加物品')
print('2.删除物品')
try:
innumber = int(input('请输入你的选择:'))
except:
innumber = 0
return innumber
@loginchack
def operation(innumber):
if innumber == 1:
print('成功添加一件物品')
elif innumber == 2:
print('成功删除一件物品')
else:
print('请输入正确的数字')
def login():
name = input('请输入用户名')
password = input('请输入密码')
if password == '123' and name == 'admin':
return True
else:
return False
loginmark = False
if __name__ == '__main__':
while True:
innumber = menu()
operation(innumber)
首先add本来就不是一个装饰函数,装饰函数有固定格式,第二,长度部位0还是有登录输入语句,你检查一下第六行你的登录逻辑,你没有做判断就直接执行了登录语句,你这里的@add是没有用的