【发布时间】:2020-03-15 18:00:09
【问题描述】:
我正在创建一个本身使用 Django 的包,我将在其他 Django 应用程序中使用它。我面临的主要问题是由于各种原因,例如日志记录和其他广泛的要求,我需要使用设置。因为,这个包没有任何视图/url,我们正在编写测试并使用 pytest 来运行它们。如果没有配置设置,测试将不会运行。因此,最初我将以下 sn-p 放入根应用程序的 __init__ 文件中。
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_package.settings")
django.setup()
现在,测试运行正常,作为独立应用程序的包正在运行。但是当我将它安装到主项目中的那一刻,它覆盖环境变量和它自己的设置,你可以想象它会带来什么样的破坏。
这是我第一次打包 django 应用程序。所以我并不精通最佳实践,而且文档有点复杂。我阅读了在其包中使用设置的各种包的结构和代码,但我仍然无法理解如何确保包访问预期的设置并且项目的设置不会同时受到影响。
在浏览文档时,我遇到了设置 DJANGO_SETTINGS_MODULE 的替代方法,如下所示:
from django.conf import settings
settings.configure(DEBUG=True)
但是我到底应该在哪里添加这个?对于导入设置的每个文件或它是否可以在__init__ 中工作(尝试过但有些不对,显示应用程序未加载)
我也试过这个,我将我的设置作为默认值导入,并使用它们作为默认值调用配置,并调用 django.setup(),但没有成功:
# my_package/__init__.py
from django.conf import settings
from my_package import settings as default
if not settings.configured:
settings.configure(default_settings=default, DEBUG=True)
import django
django.setup()
另外,我需要设置主要是因为我在使用包的项目中可以覆盖的参数很少。安装包后,我应该能够在运行时在包中访问被覆盖的变量。
如果有人可以指导如何解决这个问题或有一个更好的过程来创建需要 django 设置的包,请分享。
【问题讨论】:
标签: django environment-variables django-settings python-packaging