类装饰器
主要思想 业务和公共功能解耦
注意步骤:
1 定义new方法 引入要装饰的类的类对象以及类函数,然后返回inner函数在inner函数中处理验证和调用被装饰类的函数功能。
2 定义检测静态方法
3 在inner静态方法中检测,如果监测没问题则返回被装饰类的类方法,否则调用检测的静态方法
import tornado.ioloop
import tornado.web
user_agents = [
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36"
]
# 工具类,检测请求
class RequestTools:
class UaCheck:
def __new__(cls, func):
# 1 引入要装饰的类的类对象以及类函数
# 然后返回inner方法在inner方法中调用被装饰的类的类函数
cls.func = func
return cls.inner
@staticmethod
def check(handler):
# 2 定义检测函数
return handler.request.headers["User-Agent"]
@staticmethod
def inner(handler):
# 3 运行检测方法 如果检测失败则返回UA错误,如果检测没问题则继续运行原类实例方法
if not __class__.ch