【问题标题】:Django settings based on IP or hostname基于 IP 或主机名的 Django 设置
【发布时间】:2011-05-11 14:26:34
【问题描述】:

我想在我的设置中添加一些东西,例如

if ip in DEV_IPS:
   SOMESETTING = 'foo'
else:
   SOMESETTING = 'bar'

有没有一种简单的方法来获取 ip 或主机名 - 也是 - 这是一个坏主意吗?

【问题讨论】:

    标签: python django settings ip hostname


    【解决方案1】:
    import socket
    socket.gethostbyname(socket.gethostname())
    

    但是,我建议不要这样做,而是为您正在使用的每个环境维护多个设置文件。

    settings/__init__.py
    settings/qa.py 
    settings/production.py
    

    __init__.py 拥有你所有的默认值。在qa.py 和任何其他设置文件的顶部,第一行有:

    from settings import *
    

    随后是该特定环境所需的任何覆盖。

    【讨论】:

    • 该死的,正要发布这个答案。 :( 我同意使用多个设置文件可能是一个更好的主意。
    • 您可以在 bash 中使用“export DJANGO_SETTINGS_MODULE=settings.qa”来选择要使用的设置文件
    • 好的,考虑它有多个设置一定是一个更好的主意,但是这回答了我问的(被误导的?)问题,所以这个问题会得到解决。
    【解决方案2】:

    一些商店使用的一种方法是在每台机器上设置一个环境变量。也许叫做“环境”。在 POSIX 系统中,您可以在用户的​​ .profile 文件中执行类似 ENVIRONMENT=production 的操作(对于每个 shell 和操作系统,这将略有不同)。然后在settings.py 你可以这样做:

    import os
    
    if os.environ['ENVIRONMENT'] == 'production':
        # Production
        DATABASE_ENGINE = 'mysql'
        DATABASE_NAME = ....
    else:
        # Development
    

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 2013-03-15
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多