You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可靠的django-river替代方案:采用Python代码管理工作流状态

替代django-river的Python代码驱动型工作流方案

如果你需要摆脱django-river的数据库依赖、性能瓶颈和流转异常问题,以下几个纯代码定义工作流状态的方案更适合你:

1. Django FSM(有限状态机)

这是Django生态中最成熟的代码驱动状态管理工具,完全通过Python代码定义状态流转规则,状态存储在模型字段中,无需依赖数据库表来维护工作流关系。

核心用法示例:

from django.db import models
from django_fsm import FSMField, transition

class Approval(models.Model):
    # 用FSM字段存储状态,protected=True防止直接修改
    state = FSMField(default='draft', protected=True)

    # 定义从草稿到提交的流转
    @transition(field=state, source='draft', target='submitted')
    def submit(self):
        # 可添加提交时的业务逻辑,比如发送通知
        pass

    # 定义从提交到审批通过的流转
    @transition(field=state, source='submitted', target='approved')
    def approve(self):
        # 审批通过后的业务逻辑
        pass

    # 定义从提交到驳回的流转
    @transition(field=state, source='submitted', target='rejected')
    def reject(self):
        # 驳回后的业务逻辑
        pass

优势:

  • 性能优异:流转逻辑直接通过代码执行,无需频繁查询数据库中的工作流规则
  • 流转规则明确:所有状态转换都写在代码中,不会出现"找不到下一个选项"的模糊问题
  • 社区支持完善:文档齐全,遇到问题容易找到解决方案

2. PyWorkflow(轻量级代码驱动工作流)

这是一个纯Python的工作流库,可无缝集成Django,所有工作流节点、流转条件都通过代码定义,完全不需要数据库存储工作流元数据,适合复杂但追求高性能的场景。

核心用法示例:

from pyworkflow import Workflow, Step

# 定义工作流步骤
class SubmitStep(Step):
    def execute(self, context):
        context['approval_state'] = 'submitted'
        # 提交步骤的业务逻辑
        return True

class ApproveStep(Step):
    def execute(self, context):
        # 自定义流转条件:仅管理员可审批
        if context.get('user_role') == 'manager':
            context['approval_state'] = 'approved'
            return True
        # 条件不满足时终止流转
        return False

# 组装工作流
approval_workflow = Workflow(steps=[SubmitStep(), ApproveStep()])

# 在Django视图中调用
def handle_approval(request, approval_id):
    approval = Approval.objects.get(id=approval_id)
    # 传入上下文数据
    context = {'user_role': request.user.role}
    # 执行工作流
    approval_workflow.run(context)
    # 更新模型状态
    approval.state = context['approval_state']
    approval.save()

优势:

  • 完全代码驱动:工作流逻辑灵活定制,不受数据库结构限制
  • 性能无瓶颈:没有数据库查询开销,流转执行速度快
  • 流转条件可控:可自定义复杂的分支逻辑,避免第三方工具的规则模糊问题

3. 自定义状态流转逻辑(最简方案)

如果你的工作流逻辑不复杂,完全可以自己实现状态管理,不需要依赖任何第三方库,可控性和性能都是最优的。

核心用法示例:

from django.db import models

class Approval(models.Model):
    STATE_CHOICES = [
        ('draft', '草稿'),
        ('submitted', '已提交'),
        ('approved', '已通过'),
        ('rejected', '已驳回')
    ]
    state = models.CharField(max_length=20, choices=STATE_CHOICES, default='draft')

    # 检查是否可提交
    def can_submit(self):
        return self.state == 'draft'

    def submit(self):
        if self.can_submit():
            self.state = 'submitted'
            self.save()
            return True
        return False

    # 检查是否可审批
    def can_approve(self):
        return self.state == 'submitted'

    def approve(self):
        if self.can_approve():
            self.state = 'approved'
            self.save()
            return True
        return False

优势:

  • 零依赖:没有第三方库的潜在bug和性能问题
  • 完全可控:所有流转逻辑由自己定义,避免工具的异常问题
  • 开发快速:适合简单流程,无需学习新框架

内容的提问来源于stack exchange,提问作者Aidas Bendoraitis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:32:56