我有一个 Django 项目,它将有多个实例,一个用于我的每个客户,每个实例都有您自己的数据库和一些自定义应用程序和您自己的域,但都共享相同的源代码,唯一的区别是 settings.py文件指向正确的数据库。
我知道我可以使用指向不同设置的不同虚拟主机来实现这一点,例如 Apache 和 WSGI,但在我的例子中,我将使用 AWS Lambda 和 Zappa 为我的客户提供这项服务。
我想知道是否存在一种根据加载站点的域动态加载一些自定义设置的方法。
我有一个 Django 项目,它将有多个实例,一个用于我的每个客户,每个实例都有您自己的数据库和一些自定义应用程序和您自己的域,但都共享相同的源代码,唯一的区别是 settings.py文件指向正确的数据库。
我知道我可以使用指向不同设置的不同虚拟主机来实现这一点,例如 Apache 和 WSGI,但在我的例子中,我将使用 AWS Lambda 和 Zappa 为我的客户提供这项服务。
我想知道是否存在一种根据加载站点的域动态加载一些自定义设置的方法。
既然您说您将拥有多个实例,我猜这意味着一个客户端=一个 lambda。您可以使用 Zappa 的功能通过一个您要扩展的主要 zappa 配置部署到多个环境。在每个部署环境中,您都可以设置要使用的特定 django 设置文件。
{
"common": {
"aws_region": "eu-central-1",
"profile_name": "default",
"project_name": "zappa3",
"runtime": "python3.6",
"s3_bucket": "zappa-ewdnqwii5"
},
"client_1": {
"extends": "common",
"django_settings": "zappa3.settings.client_1",
"domain": "client-1.com"
},
"client_2": {
"extends": "common",
"django_settings": "zappa3.settings.client_1",
"domain": "client-2.com"
}
}
您可以将 settings.py 转换为设置文件夹并创建您想要添加的任意数量的域设置。我会为通用设置创建 base.py,然后每个具有特定设置的域都应该导入 base.py 和其他特定于域的设置。
目录结构将是:
设置:
当您加载 domain_1 然后尝试加载使用python manage.py runserver --settings=settings.domain_1.py
并request.meta['HTTP_HOST']
可以给您域名。