允许第三方插件在我的Django应用中使用,无需配置更改?

3 投票
2 回答
899 浏览
提问于 2025-04-16 11:10

我想知道一个好的方法或者编程“模式”,可以让我的Django应用的用户方便地添加“插件”或“扩展”,而不需要在‘已安装的应用’里添加任何东西,也不需要修改任何配置。

WordPress的插件可能是最好的例子。新的选项、设置和菜单会自动出现,但我不需要去编辑WordPress的配置或核心文件——它们会直接在我的管理界面中显示出来。

在Django/Python中,你会用什么方法或编程“模式”来开始开发一种插件架构呢?

我知道WordPress(这个例子)本身就是一个‘平台’,并且提供了插件API等等。我的问题是关于其中的模式,以及早期阶段——在应用构建之前就为插件做好准备,而不是在之后再尝试添加这个功能。

具体来说,我的应用接受“内容”,我想提供一种方式,让用户可以添加模块化的“转换器”,这些转换器可以提供该内容的额外输出(不仅仅是过滤器),可能还需要接受一些基本设置。

2 个回答

0

在pypi上有一个叫做django-plugins的工具,它可以让你定义“插件点”,这样就更容易让你的应用程序支持插件了。

你可以查看这个链接了解更多信息: http://pypi.python.org/pypi/django-plugins

2

我建议使用Django的信号系统。当你的应用发生某些操作时,它可以发送信号,然后在下一个阶段时再去监听这些信号。如果有人想要改变你应用的行为,他们只需要监听你应用发送的相关信号,然后适当地修改数据。

这样一来,应用的扩展和修改就变得非常简单,甚至不需要动你的应用源代码。

不过我想提醒一下,如果有人在使用你的应用,它不太可能会安装在项目文件夹里,所以要求他们把代码放在你的应用文件夹里并不是个好主意。它很可能会作为一个模块安装在虚拟环境中。使用我上面提到的信号方法,使用你应用的人可以在他们的项目中添加处理程序,放在最合适的地方。这样,他们就完全不需要碰你的应用源代码目录。

撰写回答