Django应用程序之间的动态注册。
django-appregistration的Python项目详细描述
Django评估
这个应用程序提供了一个基类来轻松实现django应用程序,它允许 在其中注册部件的其他应用程序。
要求:
- django>;=1.6
安装
- 从pip存储库中: pip install django appregation
- 或者直接从github: pip安装git+git://github.com/nb dev/django apregistration.git
用法
Django AppRegistration为注册 来自其他应用程序的模块: multilistpartregistry 和 单列部件注册表 。而两者都有相同的基础 功能,在多个不同列表中 可以收集的对象中,只有 包含一个列表。
要在应用程序中实现partregistry,请创建 …部件注册表 或您在您的 申请。有S您可以在 子类:
- 部分类 (必需):对象的(父)类 允许插入注册表
- 调用函数的子路径(必需):函数的子路径 由注册表在加载时调用(详细信息,请参见下文)
- 忽略"django"命名空间(默认值:true):如果为true,则任何应用程序 从django开始。 在您的 已安装的应用程序中, 将被忽略 加载时间。
要防止将任意项插入注册表,请 …PartRegistry 类检查每个添加的元素是否为实例 设置为 注册表。
当注册表尝试从安装的应用程序加载元素时 遍历应用程序并尝试,为每个应用程序获取子模块/ 在调用函数子路径中定义的函数。然后 检查检索到的对象是否可调用,如果可以,则调用它 注册表本身作为唯一的调用参数。
要在注册表中注册元素,因此需要实现 在 在已安装的应用程序中列出。然后,实现的函数需要 在传递的注册表上调用 add_item 函数。
为了进一步简化动态应用程序的使用,该应用程序提供了 筛选可用应用程序的功能 只返回当前可用的 安装。这允许django的高度动态配置 允许有选择地安装某些应用程序的项目。使用它 your settings.py 将可用的应用程序动态添加到 已安装的应用程序
文件:settings.py
from django_appregistration import filter_available_apps
INSTALLED_APPS = [
'imported_app1',
'imported_app2',
'imported_app3',
...
] + filter_available_apps(
'optional_app1',
'optional_app2',
'optional_app3',
...
)
示例
下面是一个实现示例,其中 可扩展应用程序和扩展应用程序的应用程序 注册表
文件:可扩展的
from django_appregistration import MultiListPartRegistry
class MyRegisterable(object):
pass
class MyRegistry(MultiListPartRegistry):
part_class = MyRegisterable
call_function_subpath = 'registerable.register'
文件:扩展app.registerable.py
def register(registry):
# import inside the function so that the import is only needed if the registry is used
# and the package is therefore available
from extendable_app.registry import MyRegisterable
registry.add_part('default', MyRegisterable())
registry.add_part('other', MyRegisterable())
这样,当注册表是 加载,一个在列表 默认值中,另一个在列表 其他值中。
可以像这样检索对象:
from extendable_app.registry import MyRegistry default_parts = MyRegistry.get('default') # retrieves the `default` list other_parts = MyRegistry.get('other') # retrieves the `other` list
API
API文档
多列表部件注册表(对象)
提供以下功能:
添加部件(列表,部件)
将 part 参数给定的部分添加到具有名称的列表中 由 列表参数给出。
获取(列表)
返回列表中名为 列表的部分 参数。元素在返回之前进行排序。
分类零件(零件)
可以重写以定义部件的自定义顺序。默认值 函数只返回无序的列表。
加载()
调用时,初始化类并将可用部分加载到 它的列表缓存。如果已调用 load() 则不执行任何操作。是 由 get() 函数自动调用。不用打电话 除非要在第一个 检索列表。
复位()
将注册表重置为其初始状态,以便 下次调用 load() 函数时重新加载。通常在那里 不需要调用它,因为它只会在部件 需要重新加载。
单列部件注册表(多列部件注册表)
另外还提供以下功能:
添加部件(部件)
将 part 参数给定的部分添加到列表中。
获取()
返回列表中的部件。元素在排序之前 返回。
运行测试
通过运行 测试/运行测试.py 脚本。你需要安装django和mock 让他们逃跑。如果您还想运行覆盖率,则需要安装 在运行测试之前进行此操作
更改日志
v0.0.6(2017-05-19)
- 修复自述标题级别
v0.0.5(2017-05-19)
- 添加对django 1.10和1.11的支持
v.0.0.4
- 添加用于检查 提供可用的应用程序。
v.0.0.3
- 错误修复:还将 锁和加载的 属性移动到 元类
v.0.0.2
- 错误修复:使用元类分隔 多列表部件注册表 。在每个注册表使用相同的列表之前 如果使用了多个注册表,则会导致元素混合
v.0.0.1a
- 在类中将 类型重命名为 列表
v.0.0.1
- 多类型部件注册表的初始实现 单一类型部件注册表
维修人员
本项目由Northbridge Development Konrad&;维护。 施耐德GBR 软件中心.