一: 简单测试的装饰器
import functools
import time
def test(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print('I am a test decorator')
return wrapper
def times(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs) # func(a, b) 都可以
end_time = time.time()
print(end_time - start_time)
return end_time - start_time
return wrapper
@times
def fun(a, b):
print("hello")
time.sleep(1)
print(a, b)
print("world")
@times
@test
def fun2(*args, **kwargs):
print('this is fun2')
time.sleep(0.5)
if __name__ == '__main__':
fun(2, 3)
fun2(1, 2, 3)
运行结果
hello
2 3
world
1.001413345336914
this is fun2
I am a test decorator
0.5009095668792725```
二:稍微复杂一点的装饰器:
这个装饰器是判断一般请求需要携带token才能访问到的。
```powershell
import functools
def check_token(token_field='token', method=GET):
def decorator(func):
@functools.wraps(func)
def wrapper(request):
paras = get_paras_from_request(request, method)
token = paras.get(token_field, '')
if not token:
return error_response('请传入 token')
query_result = User.objects.filter(token=token)
if not query_result:
return error_response('token 错误,请传入正确的 token')
return func(request)
return wrapper
return decorator