对于某些需要token验证的网站,当前已经写好了模拟登录的代码,但是比较冗长,想改写成Python装饰器
时间: 2024-09-28 18:14:59 浏览: 29
当你有一个函数需要在访问某个特定需要token验证的网站前进行身份验证,可以考虑使用Python装饰器(Decorator)来简化代码。装饰器本质上是一个接收函数作为输入并返回新函数的高阶函数,它们允许你在运行时修改或增强函数的行为。
下面是一个简单的例子,假设我们已经有了一个原始的`login_and_get_data`函数,它负责发送登录请求获取token,然后执行实际的数据操作:
```python
def get_token(username, password):
# 实现登录逻辑获取token
def login_and_get_data(url):
token = get_token("username", "password")
response = requests.get(url, headers={"Authorization": f"Bearer {token}"})
# 执行数据处理...
```
我们可以创建一个装饰器`auth_required`来简化这个过程:
```python
import functools
def auth_required(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
token = get_token("username", "password") # 获取token
response = func(token, *args, **kwargs) # 调用原函数并将token传递进去
return response
return wrapper
@login_required
def get_sensitive_data(url, token):
response = requests.get(url, headers={"Authorization": f"Bearer {token}"})
# 处理敏感数据...
```
现在,每次调用`get_sensitive_data`时,实际上都会先自动获取并验证token。这使得代码更简洁,并且装饰器的位置可以根据需要轻松移动。
阅读全文