gpt4 book ai didi

python - 如何以编程方式创建 django ViewFlow 进程

转载 作者:太空狗 更新时间:2023-10-29 17:46:39 27 4
gpt4 key购买 nike

概要

我正在开发一个网络应用程序来学习 Django(python 3.4 和 Django 1.6.10)。 Web 应用程序具有复杂且经常更新的工作流程。我决定集成 Django-Viewflow 库 ( https://github.com/viewflow/viewflow/ ),因为它似乎是处理工作流的一种非常方便的方式,而不是将工作流逻辑与应用程序模型结合起来。

在这种情况下,我创建了一个工作流来使用 Django-Viewflow 库收集作者身份信息和版权。每次将作者添加到图书时,都应启动工作流程。

我的问题

该文档提供了集成端到端工作流解决方案(前端和后端)的分步指南。我的问题是我很难以编程方式控制工作流(特别是从 Book 模型)。

应用说明

我有一个与作者有多对多关系的图书模型(核心模型)。

myApp/models.py

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()

工作流组件是:

myFlow/models.py

from viewflow.models import Process

class AuthorInvitation(process)
consent_confirmed = models.BooleanField(default=False)
signature = models.CharField(max_length=150)

myFlow/flows.py

from viewflow import flow
from viewflow.base import this, Flow
from viewflow.contrib import celery
from viewflow.views import StartProcessView, ProcessView
from . import models, tasks

class AuthorInvitationFlow(Flow):
process_cls = models.AuthorInvitation

start = flow.Start(StartProcessView) \
.Permission(auto_create=True) \
.Next(this.notify)

notify = celery.Job(tasks.send_authorship_request) \
.Next(this.approve)

approve = flow.View(ProcessView, fields=["confirmed","signature"]) \
.Permission(auto_create=True) \
.Next(this.check_approve)

check_approve = flow.If(cond=lambda p: p.confirmed) \
.OnTrue(this.send) \
.OnFalse(this.end)

send = celery.Job(tasks.send_authorship) \
.Next(this.end)

end = flow.End()

问题

如何以编程方式控制工作流过程(激活、确认步骤、重做步骤、取消过程......)?我试图深入研究图书馆的代码。似乎 class activate 包含正确的方法,但不确定整体应该如何编排。

提前致谢!

最佳答案

有两个额外的启动内置任务可用于流程

StartFunction - 当函数在某处调用时开始流程:

@flow_start_func
def create_flow(activation, **kwargs):
activation.prepare()
activation.done()
return activation

class FunctionFlow(Flow):
start = flow.StartFunction(create_flow) \
.Next(this.end)

# somewhere in the code
FunctionFlow.start.run(**some_kwargs)

StartSignal - 在接收到 Django 信号时启动流程:

class SignalFlow(Flow):
start = flow.StartSignal(some_signal, create_flow) \
.Next(this.end)

您可以在 this viewflow test suite 中检查它们的使用情况,以及其余的内置任务.

对于手动处理任务状态,首先你应该从数据库中获取任务,激活它,然后调用任何激活方法。

task  = MyFlow.task_cls.objects.get(...)
activation = task.activate()
if activation.undo.can_proceed():
activation.undo()

任何激活转换都有.can_proceed()方法,帮助您检查,是否处于允许转换状态的任务。

关于python - 如何以编程方式创建 django ViewFlow 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com