让django使用任意python文件中的设置,而不是可导入的模块
django-settings-file的Python项目详细描述
django设置文件
让django使用来自任意python文件的设置,而不是可导入模块。
根据James Pic’s idea posted on the django-developers mailing list。
要求
支持Python3.4+和Django 1.11-2.2。
使用量
使用pip install django-settings-file安装。
编辑manage.py和wsgi.py以交换django将DJANGO_SETTINGS_MODULE设置为 请改为:
importdjango_settings_filedjango_settings_file.setup()
在setup()调用之前添加os.environ.setdefault('DJANGO_SETTINGS_FILE', '/path/to/default.py'),除非 可以确保在您的环境中始终定义DJANGO_SETTINGS_FILE。你可能需要找出 相对于您的manage.py的路径,并进行一些os.path操作。
快跑!如果定义了DJANGO_SETTINGS_MODULE,它将引发一个DjangoSettingsFileError,并显示一条关于 现在只允许DJANGO_SETTINGS_FILE。如果未定义DJANGO_SETTINGS_FILE,它也将失败 带一条关于定义它的消息的DjangoSettingsFileError。否则django应该从设置开始!
工作原理
django-settings-file使用python上可用的导入机制导入指定文件的内容 版本(2和3的不同逻辑)并将其内容复制到自己的模块中,django将其视为设置 通过传统的DJANGO_SETTINGS_MODULE定义的文件。Django一点也不感动,只是 黑客模块。
注意事项
- 如果由DJANGO_SETTINGS_FILE定义的python文件尝试进行任何导入,则该文件所在的目录将不会 打开PYTHONPATH,这样设置文件的作者可能会得到一些惊喜。
- 此外,在加载不在PYTHONPATH上的文件时,您可能会遇到其他问题。
- 如果您希望您的设置文件扩展另一个文件,可能会发现最容易import基础文件 从PYTHONPATH上的某个位置,否则它也必须使用相同的导入“hacks”来加载默认值 设置。
- 文件路径在操作系统之间不可移植,因此您可能需要在 一次。
- 文件路径在.py和.pyc文件之间不可移植。在大多数情况下,这意味着.pyc文件将不会 用于设置,因为它不能保证在那里,稍微减慢了导入时间。
- DJANGO_SETTINGS_MODULE和DJANGO_SETTINGS_FILE不能同时由同一个项目使用,因为模块是 基于文件的逻辑所必需的。你可以允许它们都有额外的逻辑,拉请求被接受。
- ¯\_(ツ)_/¯-这是一种未知的领域,这个库没有在任何实际项目中测试过,只是 测试文件夹中的示例项目。
历史记录
待发布
2.0.1(2019-04-28)
- 用django 2.2测试。兼容性无需更改。
2.0.0(2019-02-02)
- 放弃Python2支持,现在只支持Python3.4+。
- 放下Django 1.8、1.9和1.10支架。现在只支持django 1.11+。
1.0.0(2017-04-14)
- 第一个版本,支持DJANGO_SETTINGS_FILE,而不是 DJANGO_SETTINGS_MODULE