我有一个我正在构建的Django应用程序,我们将调用它foo.
由于Foo的构建方式,它需要许多第三方django应用程序才能运行.例如,运行Foo安装应用程序可能如下所示:
INSTALLED_APPS = ('prereq1',prereq2','foo')
Run Code Online (Sandbox Code Playgroud)
事实上,为了Foo甚至功能,'prereq1', prereq2' 必须安装在django.现在,我可以添加需求requirements.txt或setup.py确保在有人安装时安装库Foo,但我无法弄清楚是否有办法在Django本身安装它们.
原因是如果有人想要使用Foo,我不想包含如下指令:
在你的
INSTALLED_APPS添加,foo但也添加scary_looking_library_name和thing_you_dont_understand.
那么应用程序是否有可能INSTALLED_APPS以某种方式要求或将更多应用程序注入该列表?
Mic*_*l B 17
我同意Daniel Roseman关于系统检查框架是这些检查的最佳位置的答案.系统检查框架是Django 1.7引入的.
但是,假设您有文档,您还可以在其安装说明中记录这些先决条件,例如Django REST Framework.
然后,您可以在代码中执行类似下面的操作(以django-mptt为例):
try:
from mptt.fields import TreeForeignKey
from mptt.models import MPTTModel
except ImportError:
raise ImportError(
'You are using the `foo` app which requires the `django-mptt` module.'
'Be sure to add `mptt` to your INSTALLED_APPS for `foo` to work properly.'
)
Run Code Online (Sandbox Code Playgroud)
这是我在多个应用程序中使用的方法.阅读文档的责任在于开发人员.
也许这是一个不受欢迎/不必要的意见,但注入依赖关系INSTALLED_APPS并不是我觉得你应该用你的应用程序处理的.
INSTALLED_APPSINSTALLED_APPS方法很难解释.如果第三方依赖项很复杂,请让开发人员决定.INSTALLED_APPS.INSTALLED_APPS- 这就是为什么没有明显的方法来做你想要的(注入).如果开发人员想要激活应用程序,他们会.正如您在您的示例中雄辩地阐述的那样,scary_looking_library_name并且thing_you_dont_understand开发人员有责任理解.选择为开发人员安装它会带来不必要的安全风险.让开发人员选择使用您的应用程序并初始化其依赖项.