为应用注册系统提供构建块的django应用程序
django-appregister的Python项目详细描述
django appregister
django appregister是一个构建块应用程序,用于实现类注册表 Django应用程序的系统。它使用与django管理员类似的方法, 允许您注册类并支持自动发现功能。
一个注册系统,为应用程序的可插入性和 可由第三方扩展,因为它们可以注册自己的子类 在主代码库中使用。
安装
使用pip:
pip install django-appregister
快速示例用法
首先,您应该创建基类,所有注册的类都必须是 的子类。通常这是models.py中的一个基本模型类,也可以是 项目中的任何位置:
>>> class AppPlugin(object): ... pass
然后需要创建自己的注册表,基可以是类,也可以是 指向基类的虚线字符串,例如"myapp.AppPlugin"。 之后,您可以继续创建注册表的实例-creating 它在模块级使得在整个项目中易于重用,但是您可以 你需要多少实例就有多少。创建注册表是很好的做法 在它自己的模块中,例如myapp/register.py:
>>> from appregister import Registry >>> class MyRegistry(Registry): ... base = AppPlugin ... discovermodule = 'plugins' >>> plugins = MyRegistry()
既然已经有了注册表,就可以开始向其中添加子类了。这个罐头 使用寄存器上的类装饰器来完成:
>>> @plugins.register ... class MyPlugin(AppPlugin): ... pass
注意,如果您使用的是2.5或更低版本的python,则不能使用该类 基于decorator,您需要手动调用它。上面的例子会 然后变成:
>>> class MySecondPlugin(AppPlugin): ... pass >>> plugins.register(MySecondPlugin) <class 'MySecondPlugin'>
注册无效对象将引发InvalidOperation异常:
>>> # Note that this class does not inherit from the base we specified. >>> class MyNonSubclass(object): ... pass >>> plugins.register(MyNonSubclass) Traceback (most recent call last): ... InvalidOperation: Object 'MyNonSubclass' is not a subclass of 'AppPlugin'
最后,现在您可以取回所有对象,包括那些已注册的对象 第三方:
>>> len(plugins) 2 >>> for plugin in plugins: ... print plugin <class 'MySecondPlugin'> <class 'MyPlugin'>
未存储注册顺序。因为我们不知道他们点了什么 将被注册,如果你想要一个排序集,你将需要排序它们 全部注册后:
>>> plugins.clear() >>> len(plugins) 0