我有一个django项目,该项目将有多个实例,一个用于我的客户端,每个实例都有您自己的DB和一些自定义应用程序和您自己的域,但是所有这些都共享相同的源代码,唯一的区别是settings.py文件指向正确的db。
我知道我可以使用不同的虚拟主机来实现这一目标,指向不同的设置使用Apphe Apache和WSGI,但是就我而言,我将使用AWS Lambda和Zappa为我的客户提供此服务。
我想知道是否存在一种动态加载一些自定义设置的方法,具体取决于加载站点的域。
,既然您说要有多个实例,我猜这意味着一个客户=一个lambda 。您可以使用Zappa的功能将要扩展的主要Zappa配置部署到多个环境。在每个倾向环境中,您可以设置要使用的特定Django设置文件。
zappa_settings.json
{
"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和其他域特定设置。
目录结构是:
-
设置:
- base.py
- domain_1.py
- domain_2.py
- ...
当您加载域_1时,然后尝试使用python manage.py runserver --settings=settings.domain_1.py
加载,request.meta['HTTP_HOST']
可以为您提供域名。