前言

它是什么

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 installeasy_install 等安装到本地机器上,然后在初始化 PluginManager 时,传入 plugin_packages 参数。

这意味着任何人都可以编写一个包并将其发布到pypi。用户编写 requirements.txt 并安装依赖项,这些依赖项在初始化中被调用,而几乎不用担心后续第三方插件升级。

如何编写第三方插件,请参阅 第三方插件

官方插件组:https://github.com/saintic

加载逻辑

非Flask-PluginKit或其插件的开发人员可以忽略这一部分。

Web应用程序启动时加载插件,通过类 PluginManager ,它的析构函数允许你传递 plugins_baseplugins_folder 参数,两者决定了插件所在的目录(相对于Web应用)。加载类的更多参数请参阅API文档。

加载流程如下:

  1. 调用 PluginManager 使用普通方式或工厂方式初始化扩展

  2. 扫描 plugins_folder 目录,符合规则的插件会动态加载。

  3. 扫描并加载 plugin_packages 参数中定义的第三方插件。

  4. 添加模板全局变量。

  5. 支持多个模板目录。

  6. 添加一个视图函数以访问插件下静态目录里文件。

  7. 注册hep、bep等。

  8. 将实例化的pluginkit添加到 app.extensions