很明显,例如在生产和开发过程中,项目配置应该是不同的。但是,默认情况下,Django 提供了使用单个settings.py,它包含所有内容,没有任何分离的提示。我想分享。
例如,在开发过程中,可以启用DEBUG = True和连接生产中无法做到的Debug Toolbar,使用特定的本地开发者数据库,放宽限制等。
另外,如果你想在某个 github 上发布一个 Django 项目,那么将它添加到存储库settings.py中并使用所有密码一点也不酷。如果你从那里删除密码,提交并返回密码,那么这一切都非常不方便,你可能会不小心忘记它并settings.py使用密码提交。是的,会有冲突。
如何将配置划分为不同的部分,以便生产设置、开发设置和密码以某种方式彼此分开?
有几种不同的方法可以在互联网上分离 Django 配置,但我认为最好的方法是通过模块和
DJANGO_SETTINGS_MODULE.启动 Django 从读取带有设置的 Python 模块开始,并且必须在环境变量中指定所需模块的名称
DJANGO_SETTINGS_MODULE- 没有它,Django 根本无法启动。为了使开发人员的生活更轻松,该命令会django-admin startproject自动规定文件中DJANGO_SETTINGS_MODULE的视图值,以及. 因此,通过更改 value ,我们可以在不同的设置文件之间切换。yourproject.settingsmanage.pywsgi.pyasgi.pyDJANGO_SETTINGS_MODULEsettings.py为了分离生产和开发,我建议使用settings包含子模块的目录而不是文件。结构是这样的:该文件
base.py存储所有环境通用的默认设置。development.py和文件production.py分别存储用于开发和生产的单独设置。根本没有文件settings.py。该文件的内容
base.py与通常的类似settings.py- 您可以简单地重命名它。我们在文件
development.py中写了一些简化开发和调试的东西:在文件
production.py中,我们编写了特定于“战斗”环境的设置:密码和密钥不存储在这里!更准确地说,您可以将
base.py一些标准密钥写入 sqlite 数据库,但不应将它们视为秘密:其想法是所有这些文件都可以安全地发布而无需任何更改。现在如何选择合适的配置?首先,请记住它已经
manage.py通过设置默认值写入文件中。现在你需要像这样替换它:当您想选择其他配置时,应将环境变量替换为
DJANGO_SETTINGS_MODULE. 我不会描述在不同操作系统中替换它的所有选项,但这里有一个示例 (*nix, sh):数据库连接、密码和密钥应存储在
local_settings.py. 此文件是机密文件,不应添加到存储库中(对于 git,它需要在 中注册.gitignore)并且不应在任何地方发布。它可能看起来像这样:您可以通过相同的方式连接它
DJANGO_SETTINGS_MODULE:但是,一直设置环境变量似乎很不方便。您可以
local_settings在文件中以相同的方式写入manage.py并和平相处。但是,您可能希望该文件local_settings.py对于项目的工作是可选的(如我所愿),因此您可以根据文件是否存在编写配置选项:此外,值得记住的是,它
DJANGO_SETTINGS_MODULE通常也写在文件中wsgi.py(并从 3.0 版本添加asgi.py),当您使用第三方服务器(uwsgi、gunicorn、uvicorn 等)在生产环境中运行项目时,您应该对这些文件进行类似的更改。(但是,在我的主观意见中,最好从外部删除引用
DJANGO_SETTINGS_MODULE并wsgi.py始终asgi.py在外部设置环境变量 - 这将增加对项目的控制并防止意外启动不正确的设置。)