编写装饰器,在每次执行目标之前先让用户输入用户名和密码,给用户三次机会,登陆成功才能访问目标函数。
时间: 2024-10-15 07:24:07 浏览: 37
编写这样的装饰器可以使用Python的`functools`模块来实现,同时结合`try-except`结构处理用户的登录尝试。下面是一个简单的示例,这个装饰器名为`login_required`:
```python
import functools
class LoginFailed(Exception): # 创建自定义异常
pass
def login_required(func):
@functools.wraps(func)
def wrapper(username, password, attempts=0):
while attempts < 3:
user_input_username = input("Please enter your username: ")
user_input_password = input("Please enter your password: ")
if user_input_username == username and user_input_password == password:
return func(user_input_username, user_input_password)
else:
attempts += 1
print("Login failed. Please try again.")
raise LoginFailed
print("Maximum attempts reached. Access denied.")
return None
return wrapper
# 使用装饰器
@login_required
def protected_function(username, password):
print(f"Welcome, {username}! You have accessed the protected function.")
# 调试
protected_function("admin", "password123")
```
在这个例子中,装饰器`login_required`会在每次尝试访问`protected_function`时请求用户名和密码。如果输入错误,用户有三次尝试的机会。如果所有尝试都失败,将会拒绝访问并显示相应消息。
阅读全文