拦截修饰器

由于所有的处理函数都是普通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": []})