FAQ

兼容旧版本

原本v3.x重构时,没有兼容旧版本,即v2.x,所以旧版插件需要一一更新才行。

旧版要求插件通过 getPluginClass 函数返回一个类,在类中写方法注册tep、bep、hep等,所以更新插件时只需要将上述方法通过 register 函数重新返回即可,比如:

旧版插件代码:

def getPluginClass():
    return MyPluginClass

class MyPluginClass(object):

    def _after_func(self, response):
        pass

    def run(self):
        pass

    def register_tep(self):
        return {
            "after_request_hook": self._after_func,
            "before_request_hook": xx
        }

    def register_bep(self):
        return {}

    def register_hep(self):
        return {}

    def register_yep(self):
        return {}

    def register_dfp(self):
        return {}

兼容性修改(添加以下代码):

def register():
    mpc = MyPluginClass()
    return dict(
        tep=mpc.register_tep(),
        bep=mpc.register_bep(),
        hep={"after_request": mpc._after_func, "before_request": xx, ...},
    )

备注

  • 新版不支持yep、dfp,而是改为其他方式。

  • hep在新版中去掉了 _hook 的后缀。

  • hep中after_request和teardown_request,要注意函数的参数变化。

不过,在v3.3.1中,添加了自动兼容的代码,Flask-PluginKit在加载时根据参数会尝试加载并转化旧版的tep、bep、hep,所以插件就可以不用进行兼容性修改了。