跳转到主要内容

一个提供应用注册系统构建块的工具

项目描述

Django appregister

https://secure.travis-ci.org/saltstack/salt.png?branch=develop

Django appregister是一个构建块应用,用于实现Django应用的类注册系统。它使用与Django管理站点类似的方法,允许您注册类,并支持自动发现功能。

一个注册系统,为制作可由第三方插件和可扩展的应用提供了良好的基础。因为它们可以在主代码库中使用自己的子类进行注册。

安装

使用pip

pip install django-appregister

快速示例使用

首先,您应该创建一个基类,所有注册的类都必须是这个类的子类。通常这可以是models.py中的基Model类,也可以是项目中的任何地方。

>>> class AppPlugin(object):
...     pass

然后,您需要创建自己的注册,基类可以是类,也可以是一个指向基类的点分字符串,例如"myapp.AppPlugin"。之后,您可以继续创建注册的实例 - 在模块级别创建它使它易于在整个项目中重用,但您可以创建尽可能多的实例。在单独的模块中创建注册是一个好习惯,例如myapp/register.py

>>> from appregister import Registry

>>> class MyRegistry(Registry):
...     base = AppPlugin
...     discovermodule = 'plugins'

>>> plugins = MyRegistry()

现在您有了注册,您可以开始向其中添加子类。这可以通过在注册上使用类装饰器来实现。

>>> @plugins.register
... class MyPlugin(AppPlugin):
...     pass

注意:如果您使用的是Python 2.5或更早版本,则不能使用基于类的装饰器,您需要手动调用它。上面的例子将变为

>>> 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

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪一个,请了解更多关于安装包的信息。

源代码分发

django-appregister-0.3.1.tar.gz (7.7 kB 查看哈希值)

上传时间 源代码

支持