跳转到主要内容

在Django应用中创建简单的“如果这个,那么那个”风格的规则。附带一系列可直接使用的操作和条件,但也易于扩展,并允许针对特定模型进行操作/条件。

项目描述

Build status PyPI version Python versions License

在Django应用中创建简单的“如果这个,那么那个”风格规则。附带一系列可直接使用的操作和条件,但也易于扩展,并允许针对特定模型进行操作/条件。

Conditioner帮助您创建由条件(如果这个)和操作(那么那个)组成的简单规则。目前仍在开发中,但我们已成功将其用于生产环境中,并使用自定义条件和操作来发送在用户许可证到期前提醒用户的“提醒”邮件。

它被创建来“挠痒痒”,在可预见的未来,我们将优先考虑实施我们需要的用例。然而,总体目标是创建一组有用的操作和条件,可以应用于多种不同场景。

哦,还要感谢 django-polymorphic,没有它,这一切都会变得更加困难。

安装

从PyPI

$ pip install django-conditioner

用法

如果您想使用已经实现的动作和条件,您只需要安装包,将 conditioner 添加到您的 INSTALLED_APPS 列表,并运行 $ python manage.py migrate

然后您应该在 Django 管理后台看到一个 Conditioner 部分,其中包含一个 Rule 子部分。添加新的部分应该是相当直观的。

高级用法

动作和条件类型

动作和条件都分为通用、模型通用和模型特定类型
- 通用动作/条件不需要设定目标类型(例如,每周一记录一条消息)- 模型通用动作/条件需要设定目标类型,但可以与所有可用的模型一起工作(例如,当创建选定的目标类型实例时记录一条消息)- 模型特定动作/条件是根据特定模型实现的,并且仅在选中时可用(例如,每周一向用户发送电子邮件);它们通常操作于特定字段(例如上一个例子中的 user.email

添加新的动作和/或条件

主要目标之一是使 conditioner 尽可能灵活,并尽可能简化添加新的动作/条件的过程。

创建动作

所有动作都需要从 BaseAction 继承并实现 run_action()。模型通用动作应将 model_specific 设置为 True,模型特定动作应将其设置为返回所需的模型类。如果您的动作是模型特定的,则模型实例将作为名为 instance 的命名参数传递给 run_action() 方法。

确保动作被 Django 捕获

您需要确保您的新创建的动作被 Django 捕获。假设它位于 sample_module 模块中的 actions.py 文件内,您的 sample_module/apps.py 应该看起来像这样

from django.apps import AppConfig


class SampleModuleAppConfig(AppConfig):
    name = 'sample_module'

    def ready(self):
        # Make sure that all models are imported
        from sample_module import actions  # noqa

将动作注册到 Django 管理后台

最后,您需要将您的动作连接到 Django 管理后台的 Rule。您可以通过将其添加到可用的内联多态模型列表中来实现。

from polymorphic.admin import StackedPolymorphicInline

from conditioner.admin import ActionInline
from sample_module.actions import SampleModuleAction


# Register `SampleModuleAction` action to 'conditioner' Django Admin
class SampleModuleActionInline(StackedPolymorphicInline.Child):
    model = SampleModuleAction


ActionInline.child_inlines.append(SampleModuleActionInline)

假设您将上述代码放入 sample_module/conditioner.py 文件中,您需要确保它也被 Django 捕获,通过在您的应用配置 ready() 方法中添加 from sample_module import conditioner 来实现。

现在您应该在 Django 管理后台看到您自定义的动作。

API

目前还没有正式的文档,但代码有注释,应该很容易使用。

话虽如此 - 如果有任何不清楚的地方,请随时在 GitHub 问题上提出

测试

该包在 Python 3.4、3.5 和 3.6 以及 Django 1.8、1.9 和 1.10 的帮助下进行了测试(见 tox.ini)。

要自行运行测试,您需要在存储库内运行 tox

$ tox

贡献

包的源代码可在 GitHub 上找到。

请随意使用、提问、分支、收藏、报告错误、修复它们、提出改进建议、添加功能以及指出任何错误。谢谢!

欢迎添加新的动作和条件,但应先进行讨论并达成一致。

作者

Omni Digital 开发和维护。

MIT 许可证 下发布。

项目详情


下载文件

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

源代码分布

django-conditioner-0.1.0.tar.gz (18.6 kB 查看哈希值)

上传时间 源代码

构建分布

django_conditioner-0.1.0-py2.py3-none-any.whl (30.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持