You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/djangoblog/plugin_manage/base_plugin.py

51 lines
1.7 KiB

#gq:
import logging
# 获取当前模块的日志记录器,方便在插件中输出日志
logger = logging.getLogger(__name__)
class BasePlugin:
# 插件元数据,子类必须定义这些属性,否则会在初始化时抛出异常
PLUGIN_NAME = None
PLUGIN_DESCRIPTION = None
PLUGIN_VERSION = None
def __init__(self):
# 检查插件元数据是否完整,不完整则抛出 ValueError 异常
if not all([self.PLUGIN_NAME, self.PLUGIN_DESCRIPTION, self.PLUGIN_VERSION]):
raise ValueError("Plugin metadata (PLUGIN_NAME, PLUGIN_DESCRIPTION, PLUGIN_VERSION) must be defined.")
# 调用插件初始化方法,子类可以在这里完成特定的初始化操作
self.init_plugin()
# 注册插件钩子,子类可以在这里注册需要监听的钩子
self.register_hooks()
def init_plugin(self):
"""
插件初始化逻辑
子类可以重写此方法来实现特定的初始化操作
"""
# 默认行为:输出插件初始化日志
logger.info(f'{self.PLUGIN_NAME} initialized.')
def register_hooks(self):
"""
注册插件钩子
子类可以重写此方法来注册特定的钩子
"""
# 默认行为:空实现,子类根据需要覆盖
pass
def get_plugin_info(self):
"""
获取插件信息
:return: 包含插件元数据的字典
"""
# 返回插件的基本信息,供外部调用者获取
return {
'name': self.PLUGIN_NAME,
'description': self.PLUGIN_DESCRIPTION,
'version': self.PLUGIN_VERSION
}