Django 设置:引发 KeyError、引发 ImproperlyConfigured 或使用默认值?
Django settings: raise KeyError, raise ImproperlyConfigured or use defaults?
Django 希望您使用 settings.py
中的环境变量来适应多种环境(例如本地、heroku、AWS)。
我想我应该在环境变量 DB_USERNAME
中定义 - 例如 - 数据库的用户名。我该如何阅读?
import os
DB_USERNAME = os.environ['DB_USERNAME']
DB_USERNAME = os.environ.get('DB_USERNAME')
DB_USERNAME = os.environ.get('DB_USERNAME', 'john')
我应该捕获 KeyError 并自己引发 ImproperlyConfigured 吗?
我更喜欢让应用程序停止而不是 运行 使用不正确的设置(默认设置,人们忘记设置变量等)。
在默认情况下,john 甚至可能同时存在于本地和远程,但具有不同的权限。看起来不是很结实。
我建议您采用不同的方法来处理您正在做的事情。
我使用以下流程:
创建一个 .env
或 .ini
文件,其中包含您的环境变量:
DB_USERNAME=myDB
A_NUMBER=1
ALLOWED_HOSTS=localhost, 127.0.0.1, my_host
DEBUG=False
MY_DJANGO_KEY=no_peeking_this_is_secret
使用decouple.config
——这会让你的生活更轻松——阅读你.env
/.ini
文件:
在 settings.py
上:
from decouple import Csv, config
DEBUG = config('DEBUG', cast=bool, default=True)
A_NUMBER = config('A_NUMBER') # No cast needed!
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv(), default='')
...
这将允许您为每个可能的配置拥有多个 .env
或 .ini
文件,并且您不必担心混淆权限等问题。
最后,我倾向于使用默认值,允许的限额最低(例如,查看我的默认允许主机,它是一个空字符串)。
但是如果有一些非常重要的变量必须正确设置,那么:
如果变量未定义且未设置默认值,config()
方法将引发 UndefinedValueError
。
因此我们可以创建一个 try:... except:
块来预测:
try:
SUPER_IMPORTANT_VAR = config('SUPER_IMPORTANT_VAR')
except UndefinedValueError:
print('Hey!! You forgot to set SUPER_IMPORTANT_VAR!!')
Django 希望您使用 settings.py
中的环境变量来适应多种环境(例如本地、heroku、AWS)。
我想我应该在环境变量 DB_USERNAME
中定义 - 例如 - 数据库的用户名。我该如何阅读?
import os
DB_USERNAME = os.environ['DB_USERNAME']
DB_USERNAME = os.environ.get('DB_USERNAME')
DB_USERNAME = os.environ.get('DB_USERNAME', 'john')
我应该捕获 KeyError 并自己引发 ImproperlyConfigured 吗? 我更喜欢让应用程序停止而不是 运行 使用不正确的设置(默认设置,人们忘记设置变量等)。
在默认情况下,john 甚至可能同时存在于本地和远程,但具有不同的权限。看起来不是很结实。
我建议您采用不同的方法来处理您正在做的事情。
我使用以下流程:
创建一个
.env
或.ini
文件,其中包含您的环境变量:DB_USERNAME=myDB A_NUMBER=1 ALLOWED_HOSTS=localhost, 127.0.0.1, my_host DEBUG=False MY_DJANGO_KEY=no_peeking_this_is_secret
使用
decouple.config
——这会让你的生活更轻松——阅读你.env
/.ini
文件:在
settings.py
上:from decouple import Csv, config DEBUG = config('DEBUG', cast=bool, default=True) A_NUMBER = config('A_NUMBER') # No cast needed! ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv(), default='') ...
这将允许您为每个可能的配置拥有多个 .env
或 .ini
文件,并且您不必担心混淆权限等问题。
最后,我倾向于使用默认值,允许的限额最低(例如,查看我的默认允许主机,它是一个空字符串)。
但是如果有一些非常重要的变量必须正确设置,那么:
如果变量未定义且未设置默认值,
config()
方法将引发UndefinedValueError
。因此我们可以创建一个
try:... except:
块来预测:try: SUPER_IMPORTANT_VAR = config('SUPER_IMPORTANT_VAR') except UndefinedValueError: print('Hey!! You forgot to set SUPER_IMPORTANT_VAR!!')