为应用注册系统提供构建块的django应用程序

django-appregister的Python项目详细描述


django appregister

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

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
servlets Java EE+GlassFish:如果用户在其他地方登录,则强制用户注销   java在不更改源代码的情况下添加钩子   安卓 Java TextView Onclick()返回表达式错误   java Excel文件未使用Apache存储内部内存   java getRowCount()和getSelectedColumn()不起作用   无法在java中生成视图绑定。util。Android Gradle插件2.1的NoTouchElementException   Java中的类型转换运算符百分比计算为零   主java中的调用方法   java在Javasound中播放多个示例   java如何知道webDriver成功打开URL   java jmock,每次调用时返回新对象   eclipse使用Java在Selenium WebDriver中生成可执行文件   macos捆绑Java OS X应用程序默认为MacRoman编码   java我应该把我的休息网关变成一个图书馆吗?   java Eclipse插件:查找包含子字符串的行号无效   Java IOException:在Linux上发送UDP数据包时没有可用的缓冲区空间   java无法解析jaxbxjc2中的名称“xjc:globalJavaType”。2.52.罐子   java是否有HibernateAPI来检查是否创建了数据库?