繁体   English   中英

在settings.py中,如果环境变量只在一个环境中使用,应该如何加载/设置?

[英]In settings.py, how should environment variables be loaded/set if they're only used in one environment?

我有一个 Django 应用程序,我在其中使用 python-decouple 和单独的.env文件处理环境变量。 这适用于开发和生产环境中都存在的变量,例如DEBUG

SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', cast=bool)
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())

虽然DEBUG在每个环境中都有不同的值,但其他变量(如SECURE_HSTS_SECONDS只需要在生产中设置,而根本不需要在开发中设置。 我目前只是在我的 settings.py 文件中硬编码这些值:

if not DEBUG:
    SECURE_HSTS_SECONDS = 60
    SECURE_HSTS_INCLUDE_SUBDOMAINS = True
    SECURE_REFERRER_POLICY = 'same-origin'
    SECURE_HSTS_PRELOAD = True
    SECURE_SSL_REDIRECT = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True

我想我可以将这些值包含在我的 dev .env文件中,然后将它们设置为默认值,但这似乎没有必要。 是否有更清洁的方法来实现这一点或最佳实践? 我更喜欢使用 python-decouple 的解决方案

我不喜欢其他答案,因为在已经拥有单独的 .env 文件的基础上添加多个设置文件似乎不必要地复杂。 我必须在我的开发和生产环境之间维护单独的 env 文件、设置文件和 wsgi.py/asgi.py 文件。

相反,我只是在 dev.env 文件中包含与 prod.env 文件相同的变量,并手动设置默认值。 这样,我只需要在 dev/prod 之间维护单独的 .env 文件。 在设置文件中的 config() function 中设置“默认”参数可能会更简洁一些,但我喜欢每个 .env 文件具有相同变量的对称性,所以这只是个人选择。

.env.dev:

DEBUG=True
ALLOWED_HOSTS=localhost, 127.0.0.1
SECURE_HSTS_SECONDS=0
SECURE_HSTS_INCLUDE_SUBDOMAINS=False
SECURE_HSTS_PRELOAD=False
SECURE_SSL_REDIRECT=False
SESSION_COOKIE_SECURE=False

.env.prod:

DEBUG=False
ALLOWED_HOSTS=mysite.com
SECURE_HSTS_SECONDS=2592000
SECURE_HSTS_INCLUDE_SUBDOMAINS=True
SECURE_HSTS_PRELOAD=True
SECURE_SSL_REDIRECT=True
SESSION_COOKIE_SECURE=True

设置.py:

DEBUG = config('DEBUG', cast=bool)

ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())

#HSTS settings
SECURE_HSTS_SECONDS = config('SECURE_HSTS_SECONDS', cast=int)
SECURE_HSTS_INCLUDE_SUBDOMAINS = config('SECURE_HSTS_INCLUDE_SUBDOMAINS', cast=bool)
SECURE_HSTS_PRELOAD = config('SECURE_HSTS_PRELOAD', cast=bool)
#HTTPS settings
SECURE_SSL_REDIRECT = config('SECURE_SSL_REDIRECT', cast=bool)
SESSION_COOKIE_SECURE = config('SESSION_COOKIE_SECURE', cast=bool)

最好有两个 (dev/prod) 或三个 (base/dev/prod) 设置文件。 这是通过相应地设置DJANGO_SETTINGS_MODULE环境变量来完成的。

因此,您可以将生产环境的设置放入不同的文件中。 此外,您可以 go 使用三文件方法,将常用设置添加到base.py文件中,然后将其导入prod.pydev.py文件。

django 文档中查找示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM