前言¶
它是什么¶
Flask-PluginKit是一个为了增强web应用功能的Flask扩展。它为你的web应用提供了一个简单的方式以创建插件,增强或扩展应用,甚至是不修改源代码。
Flask-PluginKit也可以说是用于连接web应用和插件的粘合剂或桥梁,它支持原生插件和来自pypi、git、svn等的第三方插件,此外,编写插件也很简单。
术语表¶
下面是中英对照:
- Extension Point
扩展点
- TEP / tep / Template Extension Point
模板扩展点
- HEP / hep / Hook Extension Point
钩子扩展点
- BEP / bep / Blueprint Extension Point
蓝图扩展点
- VEP / vep / View function Extension Point
视图扩展点
- DCP / dcp / Dynamic Connection Point
动态连接点
- TCP / tcp / Template Context Processor / Context Processor
模板上下文处理器扩展点
- filter
模板过滤器扩展点
- errhandler
错误处理器扩展点
- p3
插件预处理器
- Developer / developer
插件开发者
本地插件¶
插件是一个本地目录,它应该位于Web应用程序的plugins目录中(当然,也可以定义为其他目录),并且是一个合法的python包,即:plugins包含 __init__.py
文件,插件目录还包含 __init__.py
,这个文件将目录标识为包并且还标识了插件,这是核心代码,插件入口。
第三方插件¶
第三方插件非Web应用程序子目录,而是来自pip或easy_install等安装的本地模块。
第三方插件解放使用,Web应用程序不需要将插件代码放入子目录,只需要使 pip install 或 easy_install 等安装到本地机器上,然后在初始化 PluginManager
时,传入 plugin_packages
参数。
这意味着任何人都可以编写一个包并将其发布到pypi。用户编写 requirements.txt
并安装依赖项,这些依赖项在初始化中被调用,而几乎不用担心后续第三方插件升级。
如何编写第三方插件,请参阅 第三方插件
加载逻辑¶
非Flask-PluginKit或其插件的开发人员可以忽略这一部分。
Web应用程序启动时加载插件,通过类 PluginManager
,它的析构函数允许你传递 plugins_base
和 plugins_folder
参数,两者决定了插件所在的目录(相对于Web应用)。加载类的更多参数请参阅API文档。
加载流程如下:
调用
PluginManager
使用普通方式或工厂方式初始化扩展扫描 plugins_folder 目录,符合规则的插件会动态加载。
扫描并加载
plugin_packages
参数中定义的第三方插件。添加模板全局变量。
支持多个模板目录。
添加一个视图函数以访问插件下静态目录里文件。
注册hep、bep等。
将实例化的pluginkit添加到 app.extensions