Python Django上的多个站点

Python Django上的多个站点,python,django,memory,architecture,Python,Django,Memory,Architecture,我正在尝试运行大量的站点,这些站点共享大约90%的代码。它们只是为了查询API并返回结果而设计的。它们将有一个通用的用户库/数据库,但配置略有不同,并且将有不同的CSS(甚至可能有不同的模板) 我最初的想法是使用一个公共库将它们作为单独的应用程序运行,但我已经了解了sites框架,该框架允许它们从django的单个实例运行,这可能有助于减少内存使用 我的问题是,站点框架是否是解决此类问题的正确方法,它是否比运行单独的应用程序有真正的好处。起初我以为是的,但我不这么认为。我听到以下消息: 您的站

我正在尝试运行大量的站点,这些站点共享大约90%的代码。它们只是为了查询API并返回结果而设计的。它们将有一个通用的用户库/数据库,但配置略有不同,并且将有不同的CSS(甚至可能有不同的模板)

我最初的想法是使用一个公共库将它们作为单独的应用程序运行,但我已经了解了sites框架,该框架允许它们从django的单个实例运行,这可能有助于减少内存使用

我的问题是,站点框架是否是解决此类问题的正确方法,它是否比运行单独的应用程序有真正的好处。起初我以为是的,但我不这么认为。我听到以下消息:

您的站点ID在settings.py中设置,因此 站点,您需要多个settings.py配置,这意味着 多个不同的进程/实例。当然,你可以分享 它们之间的代码库,但每个站点都需要一个专门的工作人员/ WSGIDaemon将为站点提供服务

如果每个站点都需要运行一个UWSGI实例,那么这将有效地消除在一个引擎罩下运行多个站点的任何好处

系统的替代思想:


我不知道该采取什么样的方式来解决这个问题。

我不知道到底有多大程度的变化,影响有多大,发生的可能性有多大。例如:

他们将拥有一个通用的用户库/数据库

你是说相同的人使用所有的网站吗?如果是这样的话,那么风险状况就不会像不同的人(比如不同的组织)那样严重。基本上(通过良好适当的体系结构),您希望将事物解耦,这样当一个事物发生变化时,它不会对其他事物产生巨大影响

如果您运行同一个实例,那么很容易立即更新每个站点(例如,您需要在基础系统上执行维护修补程序),但另一方面,这可能会影响您(一组用户很乐意进行更改,而另一组用户则不乐意,这可能是因为功能更改或应用修补程序所需的停机时间(例如)


在不同的实例中运行相同的代码库会带来更大的维护开销,但会消除与管理更改相关的许多风险;然后,讨论如何最有效地维护同一事物的多个实例,而不是在每次更改时映射相关的风险。

实际上,您可以n同一WSGI实例下的2个(或更多)站点。 根据您的Django版本和所需的功能,有一些缺点(如使用threadlocals),但这两种解决方案都运行良好

Django 1.8+:


Django可以在运行时根据使用中间件访问的域更改站点id,允许您使用一个应用程序在不同URL上为多个Django站点提供服务,利用站点框架隔离数据。这听起来非常完美。我认为在我上面的“特许经营”链接中使用了这种方法有些人会说更改设置是不明智的,但考虑到Django如何设置站点id,我觉得这并没有那么糟糕。这当然是一个相对简单的解决问题的方法。不一定。你可以根据域等导入其他设置,就像导入本地设置以进行覆盖一样。这是一个相当复杂的问题与我以前使用和看到的有所不同。您是否考虑过使用Django CMS作为“基础”应用程序?它内置了一些有趣的多域/站点功能。