django 可以使用依赖注入吗?

问题描述 投票:0回答:1

我非常喜欢使用依赖注入技术来解耦我的代码。这通常涉及向其依赖项的构造函数中提供具有功能的对象。

我第一次使用 django 制作 Web api(附加对象数据库)。我打算将复杂的依赖项注入到原本简单的方法中。 (在我的例子中,它是解释来自 RabbitMQ 交换的消息的功能,但我的最小示例只是将通用消息解释为依赖于站点的字典)。

然而,在 django 中,所有内容似乎都是从静态方法或类定义中自动生成的,我找不到实际实例化或可定制的内容以将依赖项推入其中。

该技术和 django 框架是否不兼容,或者我遗漏了什么?

到目前为止的代码

(最小的示例重新创建,不是实际代码)

在 urs.py 中:

urlpatterns = [
    path("run/", views.run),
]

在views.py中

def run(request):
    interpreter = AbstractDataInterpreter() #This is the object I want to inject
    data = interpreter.interpret(request)
    return JsonResponse(data, safe=False)

我有一个测试班

TestDataInterpreter
用于测试。

我有课

CustomDataInterpreter
为我的域/生态系统定制。

我计划在未来的不同部署中安排其他口译员。

但是我找不到在不同部署上实际将解释器注入到运行命令中的机制。

python django dependency-injection
1个回答
0
投票

在Python中,你可以编写一个“类”,其目的是被其他类继承,但它本身是没有用的。您将在 Django 基于类的视图文档中找到被描述为“Mixin”类的此类。基本规则(避免多重继承引起的疯狂)是 Mixin 类应该继承自

object
并且始终继承到它们所混合到的类的左侧。见下文。

同样在 Python 中,使用 type 函数的三参数形式来

动态
构造一个类也非常容易。 所以静态声明如

class MyView( LoginRequiredMixin, ListView):
    pass

可能会动态创建为

MyView = type( 'MyView',             # __name__ of the class,
    (LoginRequiredMixin, ListView),  # classes it inherits from, ordered
    {}                               # __dict__ (added class vars and methods)
)

我不得不承认对“依赖注入”并不完全确定,但希望你可以使用它以Pythonic方式获得你想要的代码模式?

© www.soinside.com 2019 - 2024. All rights reserved.