将喷油器与django集成
django-injector的Python项目详细描述
django喷油器
django Injector是django的一个应用程序,它集成了injector 和Django在一起。
Injector是一个简单易用的依赖注入框架。
安装
$ pip install django_injector
然后将django_injector
添加到INSTALLED_APPS
和'django_injector.middleware.DjangoInjectorMiddleware'
在你的django配置中MIDDLEWARE
。
配置
django_injector
使用来自注入器的模块机制。所需模块应为
在INJECTOR_MODULES
设置中列出,每个项必须是injector.Module
的子类。
或者可以接收活页夹作为其唯一参数的可调用文件。
加载应用程序时加载模块。
用法
使用带有injector.inject
的注入器修饰函数或方法。装饰
方法或函数可以接收附加的、未注入的参数,应列出这些参数
在注入参数之前。
以前在django_injector
中有一个定制的inject
装饰器-它不再是
必需的,已被删除。
示例
这是从django接收request
并
一针见血的争论
frominjectorimportinjectfrommy_app.servicesimportSomeService@injectdefmy_view(request,some_service:SomeService):"""Will receive a `request` from Django and `some_service` from the injector."""returnsome_service.do_something(request)
请求范围
提供自定义Injector scope- 这是请求范围。处理单个请求期间绑定在请求作用域共享实例中的类型 但不要跨越请求处理边界。类似于 Flask-Injector's request scope。
请求作用域仅依赖于单个线程处理的单个请求(绿色线程, 当使用gevent或eventlet monkey补丁时,也支持)。
示例:
fromdjango_injectorimportrequest_scopefrominjectorimportinjectclassService:passclassRequiresService:@injectdef__init__(self,service:Service):self.service=serviceclassAlsoRequiresService:@injectdef__init__(self,service:Service):self.service=service@injectdefmy_view(request,service:Service,rs:RequiresService,ars:AlsoRequiresService):# The same Service instance everywhereassertserviceisrs.serviceassertrs.serviceisars.service# ...
内置绑定
我们可以注入django.http.HttpRequest
,它将与内部的request
参数是同一个对象
观点。绑定可用于在对象层次结构中提供HttpRequest
深度
必须手动传递。
示例:
fromdjango.httpimportHttpRequestfrominjectorimportinjectclassRequiresRequest:@injectdef__init__(self,request:HttpRequest):self.request=request@injectdefmy_view(request,rr:RequiresRequest):# The same request everywhereassertrr.requestisrequest# ...