Python 在金字塔中编写应用程序,组合它们并重用它们的代码

Python 在金字塔中编写应用程序,组合它们并重用它们的代码,python,plugins,module,pyramid,code-reuse,Python,Plugins,Module,Pyramid,Code Reuse,我是pyramid的新手,尽管我已经阅读了它的很多文档(教程+文档),但我仍然不清楚如何编写模块化的、可重用的代码 更具体地说,让我们举一个例子。比如说,我想创建一个处理论坛的网站,一个处理客户及其订单的网站,人们也可以参与论坛,以及一个处理民意调查的网站。假设在设计这些网站时,我决定编写以下“模块”(应用程序、插件,无论它们的名称如何):用户模块、论坛模块、客户模块和投票模块。我希望单独维护每个模块,并能够按如下方式使用它们: 创建论坛网站时,我希望使用论坛模块和用户模块 创建客户网站时,我

我是pyramid的新手,尽管我已经阅读了它的很多文档(教程+文档),但我仍然不清楚如何编写模块化的、可重用的代码

更具体地说,让我们举一个例子。比如说,我想创建一个处理论坛的网站,一个处理客户及其订单的网站,人们也可以参与论坛,以及一个处理民意调查的网站。假设在设计这些网站时,我决定编写以下“模块”(应用程序、插件,无论它们的名称如何):用户模块、论坛模块、客户模块和投票模块。我希望单独维护每个模块,并能够按如下方式使用它们:

  • 创建论坛网站时,我希望使用论坛模块和用户模块

  • 创建客户网站时,我希望使用用户模块、论坛模块和客户模块

  • 创建Pools站点时,我希望使用Users模块和Polls模块

此外,Forums模块、Customers模块和Polls模块应该依赖于Users模块,它们的models.py应该引用Users模块的Users模式(假设我们使用的是关系数据库,我们使用的是sqlalchemy来表示ORM)。每个模块都应该有自己的静态内容、模型、表单等

我知道我给出的例子可以用不同的设计来解决,但请注意,这是我想到的第一个确实符合我问题的例子,所以让我们-请-假装这确实是一个要求


也就是说:我如何用金字塔实现这个功能?我认为在配置方面,config.include()可能是我的候选者,但实现对我来说非常不清楚,因此非常感谢您的帮助

一种方法是使用
setuptools
将每个应用程序作为单独的金字塔应用程序分发,并使用
pip
安装。例如,如果您正在开发需要
用户
论坛
应用程序的新应用程序,您可以在virtualenv中安装
pip my users==0.1 my forum==0.5
,并在新应用程序配置中包括这两个应用程序:

config.include('my_users')
config.include('my_forum')
这两个应用程序都应该实现一个

检查其他应用程序如何提供可重用性:


谢谢matino,你的回答对我问题的模块部分已经足够了。另一方面,我仍然不确定如何处理模型依赖性问题、模块依赖性问题和静态。我假设模块依赖性问题将通过setuptools解决,静态(和路由)将通过配置参数(include和includeme?)解决,但我不知道如何编写依赖于另一个模块表的模型,以及所有模块如何使用同一数据库。我假设后者可以在每个模块的数据库配置中解决。您应该在配置文件中存储数据库连接字符串,您的所有模型都将使用相同的数据库。如果您使用我极力推荐的SQLAlchemy,那么模型类名实际上就是SQL表。所有表都将在数据库中创建,因此您只需从另一个包导入模型并使用它。您可以在第三方应用程序中使用模型混合,并在主项目中重新定义它。(例如)