【问题标题】:Different settings.py file for different domains in DjangoDjango中不同域的不同settings.py文件
【发布时间】:2019-02-28 19:37:34
【问题描述】:

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

我知道我可以使用指向不同设置的不同虚拟主机来实现这一点,例如 Apache 和 WSGI,但在我的例子中,我将使用 AWS Lambda 和 Zappa 为我的客户提供这项服务。

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

【问题讨论】:

    标签: python django aws-lambda wsgi zappa


    【解决方案1】:

    既然你说你将有多个实例,我猜这意味着一个客户端=一个 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"
        }
    }
    

    【讨论】:

    • 嗯,有趣的方法,我来看看,谢谢。
    • 感谢您突出显示 extends 键,它在文档中有点隐藏。
    【解决方案2】:

    您可以将 settings.py 转换为设置文件夹,并创建您想要添加的任意多个域的设置。我会为通用设置创建 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'] 可以为您提供域名。

    【讨论】:

    • 好的,这我知道,但是我将如何动态检测域并使用正确的域执行此命令?
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2013-05-24
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多