首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django的工作流框架

Django的工作流框架
EN

Stack Overflow用户
提问于 2011-07-23 03:51:55
回答 7查看 29K关注 0票数 47

我一直在寻找一个框架来简化Django应用程序中相当复杂的工作流的开发。我希望能够使用该框架来自动化状态转换、许可,也许还有一些额外的功能,比如审计日志和通知。

我已经看过一些关于同一主题的更老的信息,但在过去的2-3年里并不是很多。我听说的主要选择是GoFlow (自2009年2月以来没有更新过)和django-workflow (似乎更活跃)。

有没有人用过这些包?它们是否成熟和/或与现代(1.3) Django兼容?有没有其他值得考虑的选择,可能更好或更好的支持?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-09-08 11:23:09

我是django-fsm和django-viewflow的作者,这两个项目可以称为“工作流库”。

工作流字本身有点被高估了。不同种类的库和软件可以自称为“工作流”,但具有不同的功能。工作流的共性是将某个过程的各个步骤连接成一个整体。

一般分类

在我看来,工作流实现方法可以分为以下几类:

顺序用户工作流-无论是工作流库自动化单用户任务还是具有权限检查/任务分配options.

  • Sequential/Parallel -
  • Single/Multiple 只是一个状态机模式实现,并允许在某个时刻拥有单个活动状态。并行工作流允许同时有多个活动任务,且可能具有某种并行同步/联接functionality.
  • Explicit/Implicit --无论工作流是表示为单独的外部实体,还是被编织到某个其他类中,主要职责是different.
  • Static/Dynamic -静态工作流在python代码中实现一次,然后执行,动态工作流通常可以通过改变工作流数据库表的内容来配置。静态工作流通常与django基础架构的其余部分更好地集成在一起,如视图、表单和模板,并通过常见的python构造(如类继承)支持更好的自定义。动态工作流假定您具有可适应任何工作流运行时更改的通用接口。

其中,前两个可以被认为是渐进式的差异,但其他两个是基本的。

特定的包

以下是我们目前在工作流部分下的django、djangopackages和awesome-django project list中的简要描述:

  • django.contrib.WizardView -隐式的、单用户的、顺序的、静态的是我们所能拥有的最简单的工作流实现。它以隐藏的形式存储中间状态后data.
  • django-flows -显式,单用户,顺序,静态工作流,将流程状态保存在外部存储,以允许用户关闭或打开另一个标签页上的页面并继续working.
  • django-fsm -隐式,多用户,顺序,静态工作流-最紧凑和轻量级的状态机库。状态改变事件表示为python方法对模型类的调用。对流继承和重写有基本的支持。提供用于关联权限与状态转换的槽。允许使用乐观锁定来防止并发状态updates.
  • django-states -显式、多用户、顺序、静态工作流,具有用于状态机和状态转换的单独类。通过将转换的字符串名传递给make_transition方法进行的转换。提供将权限与状态转换相关联的方法。有一个简单的REST通用端点,用于使用AJAX调用更改模型状态。在文档中没有提到对状态机继承的支持,但是类的状态定义使得它可以与没有或很少的核心库modifications.
  • django_xworkflows -显式的,顺序的,静态的工作流,不支持用户权限检查,状态机的分离类。使用元组定义状态和转换,使工作流继承支持hard.
  • django-workflows -显式、多用户、顺序、动态的工作流将状态存储在库中提供的django模型。有一种方法可以将权限附加到工作流转换,基本上就是这样。

这些django状态机库都不支持并行工作流,这在很大程度上限制了它们的应用范围。但有两个是这样的:

  • django-viewflow -显式,多用户,并行,静态的工作流,支持并行任务执行,复杂的拆分和连接语义。提供助手来集成django函数视图和基于类的视图,以及不同的后台任务执行查询,以及各种悲观和乐观的锁策略,以防止所讨论的并发updates.
  • GoFlow,,趋向于显式,多用户,并行,动态的工作流,但它已经被作者抛弃了几年。

我看到了在django-viewflow之上实现动态工作流构造功能的方法。一旦它完成,if将结束django世界中最后一个也是最复杂的工作流实现案例。

希望到目前为止,如果有人能够阅读,现在可以更好地理解工作流术语,并可以有意识地为他们的项目选择工作流程库。

票数 100
EN

Stack Overflow用户

发布于 2011-07-23 03:58:42

有没有其他值得考虑的选择,可能更好或更好的支持?

是。

巨蟒。

您不需要工作流产品来自动化状态转换、许可,也许还需要一些额外的功能,比如审计日志和通知。

这就是为什么没有很多项目这样做的原因。

  • 状态设计模式非常容易实现。
  • 授权规则(“许可”)已经是Python的一流部分(并且已经被添加到Django中)。用于审计日志记录的是一个审计表或另一个记录器(或两者都有)。
  • 消息框架(“通知”)已经是Django的一部分。

你还需要什么?你已经拥有了一切。

使用状态设计模式的类定义,以及用于授权和日志记录的装饰器,效果非常好,您不需要任何超出已有的东西。

请阅读以下相关问题:Implementing a "rules engine" in Python

票数 10
EN

Stack Overflow用户

发布于 2011-09-24 06:03:45

我的一个同事django-fsm编写的一个包似乎工作得很好--它既相当轻量级,又功能强大,非常有用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6795328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档