拦截修饰器
由于所有的处理函数都是普通Python函数,所以要实现面向切片(AOP)风格的处理可以直接使用自定义修饰器来实现。虽然Sanic文档中未将这类修饰器命名,这里根据其常用操作方式,称其为拦截修饰器。以下借用鉴权验证功能来展示以下拦截修饰器的定义和使用。
from functools import wraps
from sanic.response import json
def authorized():
def decorator(f):
@wraps(f)
asnyc def process_authorizing(request, *args, **kwargs):
# 这里进行鉴权操作
is_authorized = check_authorize()
if is_authorized:
response = f(request, *args, **kwargs)
return response
else:
return json({"authorized": false}, status=403)
return process_authorizing
return decorator
@app.route("/")
@authorized()
async def get_names(request):
return json({"names": []})