一个提供应用注册系统构建块的工具
项目描述
Django appregister
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7642f166b9e864b37059927c426518fb971fa36d47274f412e2c06fa72b15d91 |
|
MD5 | 3d47187bd82ceea124e192ca7039a2f7 |
|
BLAKE2b-256 | 8e45b669c9e2e5b04132d99f0e6dab5c98b4a2a8aca498f61689e2857b85a529 |