1

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

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

这也将有所帮助,因为我们可以将两个电子商务网站的两个不同的客户和产品数据库加入到这个大型通用数据库中。

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

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

  • 创建一个打包的、可安装的 Python 模块,例如 Internet 上的现有模块(setuptools、lxml、tastepie),并将该模块导入到两个 Django 项目中;
  • 让项目位于机器中的目录上,并在 Python 文件中实时从该路径导入(以前做过,可以工作,但似乎有一些开销);

编辑:此外,我们的通用模型/功能包含商业机密和可专利的内容,因此公开分发是不可能的。我猜该路线将是创建类似包的东西,但不公开分发,仅分发并安装在 2 台特定机器上。

有人可以对此提供一些反馈吗?

谢谢

4

3 回答 3

1

我会将常用模型等分离出来,放入它自己的 python 包中。然后每个项目都会安装这个包,或者只是在系统级别安装包,他们都可以使用它。如果你处理得当,你不应该改变很多你的导入,你可以通过将一个新的鸡蛋推送到服务器并通过安装来轻松更新包easy_installor pip

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

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

于 2012-10-04T13:53:08.323 回答
0

在单个项目中将您的模型组织成逻辑应用程序。

例如具有 4 个应用程序的单个项目:

myproject/
    blog/
    contact/
    project1specific/
    project2specific/

使用站点框架: 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 使用不同的数据库设置,或者向模型添加站点 FK 并使 AdminForms 查询集仅反映当前站点记录。

如果您需要任何细节,请告诉我,但这就是我将如何完成您正在做的事情。

于 2012-10-04T13:55:16.403 回答
0

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

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

于 2012-10-04T13:56:09.240 回答