#gq: # 导入Django博客系统的插件基类,所有自定义插件需继承此类以实现标准化接口 from djangoblog.plugin_manage.base_plugin import BasePlugin # 导入插件钩子管理模块,用于将插件功能绑定到系统预设的钩子点 from djangoblog.plugin_manage import hooks # 定义文章浏览次数统计插件类,继承自插件基类BasePlugin class ViewCountPlugin(BasePlugin): # 插件名称:在插件管理界面展示,用于区分不同插件 PLUGIN_NAME = '文章浏览次数统计' # 插件功能描述:说明插件的核心作用,方便管理员理解用途 PLUGIN_DESCRIPTION = '统计文章的浏览次数' # 插件版本号:用于版本管理,便于后续更新和兼容性判断 PLUGIN_VERSION = '0.1.0' # 插件作者信息:标注开发者,便于维护和沟通 PLUGIN_AUTHOR = 'liangliangyy' def register_hooks(self): """ 注册插件钩子:将统计逻辑绑定到系统的特定触发点 作用:告诉插件系统“在哪个时机执行当前插件的功能” """ # 绑定规则: # 1. 'after_article_body_get' 是系统预设的钩子名称,代表“文章内容获取完成后”的时机 # 2. self.record_view 是当前插件的核心方法,即钩子触发时要执行的逻辑 # 场景:当用户访问文章详情页,系统成功获取文章内容后,自动触发浏览次数统计 hooks.register('after_article_body_get', self.record_view) def record_view(self, article, *args, **kwargs): """ 核心统计方法:执行文章浏览次数的记录操作 参数说明: article:钩子传递的文章对象(即当前被访问的文章),必须是Article模型实例 *args, **kwargs:预留参数,用于接收钩子传递的额外信息(如请求对象等),保证扩展性 """ # 调用文章对象的viewed()方法: # 该方法应由Article模型预先实现(通常逻辑为“将view_count字段+1并保存到数据库”) # 插件通过调用模型方法实现统计,解耦插件与数据模型的直接操作,符合设计规范 article.viewed() # 实例化插件类: # 插件系统会扫描并加载该实例,使上述注册的钩子和功能生效 plugin = ViewCountPlugin()