在多个项目中包含常见的Django项目

时间:2012-10-04 13:39:16

标签: python django

我有两个Django项目,我使用了很多常见的模型。自定义用户类,算法类,产品类。这两个项目与电子商务有关,两者都在不同的机器上运行,服务完全不同。

然而,考虑到他们将这些模型设置为“通用”,我想知道是否值得创建第三个共同项目作为基础模型的“基础”,然后这两个项目将导入此基础项目中的常用模型。

这也有助于我们将两个不同的客户和产品数据库从两个电子商务网站加入这个大型公共数据库。

我的问题是: 1)是否有人对可能的开销有经验或能够实际估计它?加入两个Django项目的公共部分将是必要的,但我估计在导入第三个项目时可能会有很多开销(可能是实时的)。

2)进入第三个项目的最佳方法是什么?我可以想到多种方式:

  • 创建一个打包的,可安装的Python模块,例如互联网上的现有模块(setuptools,lxml,tastypie),并将该模块导入两个Django项目;
  • 让项目坐在机器上的一个目录中,并在Python文件中实时从该路径导入(之前已经完成,但有效,但似乎有一些开销);
编辑:我们的常见模型/功能还包含贸易分配和专利内容,因此公开发布是不可能的。我猜这条路线的目的是创建类似于包的东西,但不是公开分发的,只是在2台特定的机器上分发和安装。

有人能对此提出一些反馈意见吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我会将常见的模型分离出来,进入它自己的python包。然后每个项目都将安装此软件包,或者只是在系统级安装软件包,他们都可以使用它。如果您正确处理此问题,则不必更改大量导入,并且可以通过将新蛋推送到服务器并通过easy_installpip进行安装来轻松更新包。

这是我目前设置项目的方式。常见的非业务逻辑被分离到他们自己的项目中,我从中创建一个包,然后像任何其他python库一样安装和使用。

这里的一些额外工作可以为您节省大量时间,并允许在各种项目之间透明地更新您的公共代码。

答案 1 :(得分:0)

将您的模型整理到单个项目中的逻辑应用程序中。

例如,包含4个应用的单个项目:

myproject/
    blog/
    contact/
    project1specific/
    project2specific/

使用Sites Framework: https://docs.djangoproject.com/en/dev/ref/contrib/sites/

有2个settings.py文件(settings_p1.py,settings_p2.py)

在每个设置文件中,将SITE_ID设置为每个项目的不同值。

SITE_ID = 1 (or 2 for the second project)

不要忘记在您的站点表中实际创建第二个站点记录!

在每个settings.py中的INSTALLED_APPS中,仅包含您要用于此特定项目的应用。

也许在2个项目的设置文件中设置2个不同的模板目录,STATIC_ROOT(MEDIA_ROOT可能会保持不变)和urls文件。

此时,您可以为每个项目settings.py使用不同的数据库设置,或者将Site FK添加到模型中,并使AdminForms查询集仅反映当前站点记录。

如果您需要任何细节,请告诉我,但这就是我将如何完成您的工作。

答案 2 :(得分:0)

如果您打算在可预见的未来并行支持这些应用程序,这绝对是值得的。没有什么比改变一件事情然后在另一个地方几乎逐字地重复它更令人沮丧的,特别是如果奇怪的项目特定的错误开始出现,因为两者仍然略有不同。

实现此类共享的一种方法可能是git submodules或felixge Git Fake Submodules