Django中不同域的不同settings.py文件

时间:2019-02-28 19:37:34

标签: python django aws-lambda wsgi zappa

我有一个Django项目,它将有多个实例,每个客户端一个,每个实例都有您自己的数据库和一些自定义APP和您自己的域,但是都共享相同的源代码,唯一的区别是指向正确数据库的settings.py文件。

我知道我可以使用不同的虚拟主机(例如使用Apache和WSGI)指向不同的设置来实现此目的,但就我而言,我将使用AWS Lambda和Zappa为我的客户端提供此服务。

我想知道是否存在一种根据加载站点的域动态加载某些自定义设置的方法。

2 个答案:

答案 0 :(得分:0)

您可以将settings.py转换为settings文件夹,并创建要添加的任意多个域设置。我会为通用设置创建base.py,然后每个具有特定设置的域都应导入base.py和其他特定于域的设置。

目录结构为:

  • 设置:

    • base.py
    • domain_1.py
    • domain_2.py
    • ...

当您加载domain_1时,请尝试使用python manage.py runserver --settings=settings.domain_1.py进行加载,而request.meta['HTTP_HOST']可以为您提供域名。

答案 1 :(得分:0)

因为您说过要有多个实例,所以我猜这意味着一个client =一个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"
    }
}