为应用注册系统提供构建块的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第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?