我对 Django Rest Framework 有点陌生。
我有一个 views.py
,看起来像这样:
class MyAPIView(APIView):
""" My API """
def get(self, request, path):
""" Handles GET calls """
def post(self, request, path):
""" Handles POST calls """
我的包中有一个 util 类,如下所示:
类MyUtilClass: """帮忙解决问题"""
def some_method(自身, 路径): print('我现在将对路径执行操作:', path)
现在,我想注入(inject)一些其他类的实例,该类执行我认为应该执行的某些任务。像这样的事情:
class MyAPIView(APIView):
""" My API """
_some_util_instance = None # How to inject this?
def __init__(self, util_instance):
self._some_util_instance = util_instance # Is this the right way?
def get(self, request, path):
""" Handles GET calls """
self._some_util_instance.some_method(path) # This is why I want this object injected.
def post(self, request, path):
""" Handles POST calls """
将此类实例注入(inject)我的 View 类的最佳方法是什么?
我在文档中找不到太多相关内容。我熟悉使用 DI 和 IoC 容器。但是,我不确定 Django Rest Framework 如何处理所有这些。
最佳答案
class MyAPIView(APIView):
""" My API """
_some_util_instance = MyUtilClass()
或者
class MyAPIView(APIView):
""" My API """
def __init__(self, *args, **kwargs):
self._some_util_instance = MyUtilClass()
super().__init__(self, *args, **kwargs)
或者
MyAPIView.as_view(
_some_util_instance=MyUtilClass()
)
class MyAPIView(APIView):
""" My API """
_some_util_instance = None
或者
不要使用类作为实用函数的容器,只需将它们定义为模块级函数。这是我首选的方法。
或者
使用静态/类方法
class MyUtilClass:
""" Helps out with stuff """
@classmethod
def some_method(cls, path):
print('I will now do things to the path: ', path)
然后你可以简单地在 View 中调用MyUtilClass.some_method(path)
,而不需要创建MyUtilityClass
的实例
关于python - 如何将属性或对象注入(inject)到 Django Rest Framework 中的 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53234190/