跳转到主要内容

让Django使用任意Python文件中的设置而不是可导入的模块

项目描述

https://img.shields.io/github/workflow/status/adamchainz/django-settings-file/CI/main?style=for-the-badge https://img.shields.io/pypi/v/django-settings-file.svg?style=for-the-badge https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge pre-commit

未维护(2022-12-07)

由于该包从未流行,我已停止维护此包。如果您想使用功能,我建议将少量代码复制到您的项目中。


让Django使用任意Python文件中的设置而不是可导入的模块。

根据James Pic在django-developers邮件列表中发布的想法

要求

支持Python 3.7到3.11。

支持Django 3.2到4.1。


想要更聪明、更快速地工作?查看我的书提升您的Django DX,它涵盖了许多提高您开发体验的方法。


用法

  1. 使用 python -m pip install django-settings-file 安装。

  2. 编辑您的 manage.pywsgi.py 文件,以替换 Django 默认的 DJANGO_SETTINGS_MODULE 设置逻辑,改为执行以下操作:

    import django_settings_file
    
    django_settings_file.setup()
  3. 在调用 setup() 之前添加 os.environ.setdefault('DJANGO_SETTINGS_FILE', '/path/to/default.py'),除非您能确定 DJANGO_SETTINGS_FILE 将始终在您的环境中定义。您可能需要使用一些 os.path 操作来找出相对于您的 manage.py 的路径。

  4. 运行它!如果 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 上时加载文件时遇到其他问题。

  • 如果您想使您的设置文件扩展另一个文件,您可能最简单的方法是从 PYTHONPATH 上的位置导入基础文件,否则它也必须使用相同的导入“黑客”技巧来加载默认设置。

  • 文件路径在不同操作系统之间不可移植,因此您可能需要逻辑来同时支持 Unix 和 Windows。

  • 文件路径在 .py.pyc 文件之间不可移植。在大多数情况下,这意味着不会使用 .pyc 文件作为设置,因为它无法保证存在,这会略微减慢导入时间。

  • DJANGO_SETTINGS_MODULEDJANGO_SETTINGS_FILE 不能在同一个项目中同时使用,因为模块对于基于文件的逻辑是必需的。您可能可以通过额外的逻辑允许它们同时使用,欢迎提交拉取请求。

  • ¯\_(ツ)_/¯ - 这是一种未知领域,这个库还没有在任何实际项目中测试过,只是在测试文件夹中的示例项目中测试过。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-settings-file-2.10.1.tar.gz (5.7 kB 查看哈希值)

上传时间: 源文件

构建分发

django_settings_file-2.10.1-py3-none-any.whl (5.2 kB 查看哈希值)

上传时间: Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面