gpt4 book ai didi

python - 如何在 INSTALLED_APPS 中包含必备应用

转载 作者:太空狗 更新时间:2023-10-29 17:55:26 26 4
gpt4 key购买 nike

我有一个正在构建的 Django 应用程序,我们将其称为 foo

由于 Foo 的构建方式,它需要许多第三方 django 应用程序才能运行。例如,要运行 Foo,安装应用程序可能如下所示:

INSTALLED_APPS = ('prereq1',prereq2','foo')

事实上,要使 Foo 发挥作用,必须在 django 中安装 'prereq1', prereq2' 。现在,我可以将要求添加到 requirements.txtsetup.py 以确保在有人安装 Foo 时安装库,但是我不知道是否有办法将它们安装在 Django 本身中。

这样做的原因是如果有人想使用 Foo,我不想包括像这样的指令:

In your INSTALLED_APPS add foo but also add scary_looking_library_name and thing_you_dont_understand.

那么 INSTALLED_APPS 中的应用是否有可能以某种方式要求或向该列表中注入(inject)更多应用?

最佳答案

我同意 Daniel Roseman 关于 system checks framework 的回答是进行这些检查的最佳场所。 Django 1.7引入了系统检查框架。

但是,假设您有文档,您还可以记录这些先决条件,例如 Django REST Framework did in their installation instructions .

然后您可以在代码中执行类似以下操作(以 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.'
)

这是我在多个应用程序中看到的方法。阅读文档的责任在于开发人员。

也许这是一个不受欢迎/不必要的意见,但将依赖项注入(inject) INSTALLED_APPS 并不是我认为您应该在应用程序中处理的事情。

我通常会尝试遵循 Zen of Python在设计应用程序时:

  1. “显式优于隐式。”
    • 让开发人员在 INSTALLED_APPS 中手动输入依赖项
  2. “如果实现难以解释,那就不是个好主意。”
    • 试图找出一种将依赖项注入(inject) INSTALLED_APPS 的方法很难解释。如果第三方依赖比较复杂,让开发者决定。
  3. “简单胜于复杂。”
    • 更容易记录依赖项并要求开发人员将它们添加到 INSTALLED_APPS
  4. “应该有一种——最好只有一种——显而易见的方法来做到这一点。”
    • 通常的做法是让开发人员将第三方应用程序添加到 INSTALLED_APPS - 这就是为什么没有明显的方法来执行您想要的操作(注入(inject))。

如果开发者想要激活应用,他们会的。正如您在示例中 Eloquent 地陈述的那样,scary_looking_library_namething_you_dont_understand 是开发人员理解的责任。选择为开发人员安装它会带来不必要的安全风险。让开发人员选择使用您的应用程序并初始化其依赖项。

关于python - 如何在 INSTALLED_APPS 中包含必备应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com