开发中经常遇到需要对某个接口做权限校验,或者访问频率限制等,这时候就可以使用装饰器对请求进行预处理,如果满足访问条件,则放行;不满足则抛出自定义的异常。
from flask.views import View
class User(View):
@aac.require_login
def get(user_id):
'''登录校验'''
···
return ""
@aac.limit_rate(1, 1)
def post(user_id):
'''频率限制器'''
以上展示了两种装饰器——不带参数的装饰器、带参数的装饰器,以下是装饰器的具体结构
class acc:
@classmethod
def require_login(f):
def wrapper(*args, **kwargs):
···
# 此处做一些是否登录的判定逻辑
···
return f(*args, **kwargs)
@classmethod
def limit_user_rate(ts, sec):
"""限制单个用户的访问频率"""
def d(f):
def wrapper(*args,**kwargs):
···
# 此处做访问频率的的判定逻辑
···
return f(*args, **kwargs)
return wrapper
return d