【问题标题】:How do I try:except between development and production?我该如何尝试:开发和生产之间除外?
【发布时间】:2021-03-31 15:01:54
【问题描述】:

我只是陷入了困境。认为这应该在开发和生产中都可以正常工作(使用两种不同的方法设置了环境变量,但我错了。它只适用于生产。在开发中它会抛出一个以“django.core”结尾的长错误.exceptions.ImproperlyConfigured:SECRET_KEY 设置不能为空。”

try:
    SECRET_KEY = os.getenv("PRODUCTION_SECRET_KEY")
except:
    SECRET_KEY = os.environ.get('DEVELOPMENT_SECRET_KEY')

【问题讨论】:

    标签: python django environment-variables development-environment production-environment


    【解决方案1】:

    os.getenv()doesn't throw an error if the environment variable doesn't exist。因此,即使在您的开发环境中,os.getenv() 调用也很可能会成功,将SECRET_KEY 设置为空值,从而导致 Django 错误(甚至说设置为空)。

    您不应使用try/except 语句,因为不会引发错误。相反,您应该使用if 语句,例如:

    SECRET_KEY = os.getenv('PRODUCTION_SECRET_KEY')
    if not SECRET_KEY:
        SECRET_KEY = os.getenv('DEVELOPMENT_SECRET_KEY')
    

    【讨论】:

      【解决方案2】:

      让我们做一个简单的单例类!

      class Secret(object):
          def __new__(cls):
              cls.key = os.getenv('PRODUCTION_SECRET_KEY') or os.getenv('DEVELOPMENT_SECRET_KEY')
              if cls.key is None:
                  raise SomeError
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-14
        • 2011-10-09
        • 1970-01-01
        • 2018-05-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多