1

我开始着手一个新的大型项目 - 许多基于城市的网上商店,每个都在一个域的自己的子域上工作,例如citydomain.webshop.com. 开始时应该有大约 40 个这样的网站同时运行。

Project 的后端业务逻辑和模板样式在每个站点上都是相同的。一些静态文件和数据库数据在所有站点和特定站点(日志、图像、销售项目、订单等)中都是通用的。

我的问题是如何以这样一种方式实现最好的架构,即某个用户在不同的子域上访问相同的 URL 会得到由相同的后端逻辑处理的子域的特定数据。

我假设可能的架构有以下选项:

1) Django 项目实例:所有站点的一个实例或每个站点的多个实例?

就 DRY 原则而言,第一种方式似乎比第二种方式更合乎逻辑。我相信理想情况下应该有一个项目实例,其中包含许多子文件夹,每个站点的特定图像、日志等都有子域名称。

2)数据库:所有站点一个数据库或每个站点多个数据库?

由于相同的 DRY 原则,我也倾向于拥有一个数据库。大量数据将在不同的特定于站点的数据库中重复,并且在它们之间即时切换可能很麻烦(根据文档,数据库路由器似乎是这里的工具)。

只有一个数据库,我是否应该使用将特定于站点的数据存储在各种表中(据我所知,sites framework使用外键建模)?Site那么我应该如何根据当前子域更改 SITE_ID 呢?我应该使用:a) 一些自定义中间件还是 b) 一些插件,例如django-subdomains, django-multisite, Airavata

或者也许根本没有实施的用处sites framework

3)设置:将设置存储在settings.py文件中(主要的一个和许多特定于站点的文件)或将主settings.py文件与仅存储在数据库中的特定于站点的选项结合起来(可能在Site表或另一个可以扩展它的表中)?

4)虚拟主机:一个只用于主域或每个站点有多个虚拟主机?第二个选项可以通过许多settings.py具有自己的 SITE_ID(从一个 main 继承settings.py)的特定于站点的小型文件来建立,并为每个子域添加许多特定于站点的 WSGI 文件?

请给我一些关于上述项目的最佳实践的建议。对于这些类似“十字路口”的选项,正确的决定应该是什么,你会推荐什么?

4

1 回答 1

0

好的,我会在完成大量工作后回答我自己的问题。

根据我的项目需要,我决定将几乎所有内容集中在一个地方,以免以后与同一事物的这么多版本混淆。一个项目实例,一个数据库,一个设置包,一个虚拟主机。

特定于子域​​的数据存储在 a) 数据库中(链接到自定义编写的域模型),如果它是纯文本数据 b) 或者作为文件保存到项目实例中的某个子域特定目录树中,如果它是二进制数据(大部分是图片)。

设置包由基本设置文件和三个特定于环境的文件(开发、登台、生产)组成,从这个基本文件中导入所有内容。您必须选择要使用的文件并将其重命名为settings.py.

于 2017-07-16T17:20:35.350 回答