pro*_*ium 12 python django workflow django-viewflow
概要
我正在开发一个学习Django的Web应用程序(python 3.4和Django 1.6.10).Web应用程序具有复杂且经常更新的工作流程.我决定集成Django-Viewflow库(https://github.com/viewflow/viewflow/),因为它似乎是处理工作流程的一种非常方便的方式,而不是将工作流逻辑与应用程序模型结合在一起.
在这种情况下,我创建了一个工作流程,使用Django-Viewflow库收集作者信息和版权.每次将作者添加到书籍时都应启动工作流程.
我的问题
该文档提供了逐步指导,以集成端到端的工作流解决方案(前端和后端).我的问题是我很难以编程方式控制工作流程(特别是从Book模型).
申请说明
我有一个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()
Run Code Online (Sandbox Code Playgroud)
工作流程组件是:
myFlow/models.py
from viewflow.models import Process
class AuthorInvitation(process)
consent_confirmed = models.BooleanField(default=False)
signature = models.CharField(max_length=150)
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
题
如何以编程方式控制工作流程(激活,确认步骤,重做步骤,取消流程......)?我试图深入研究图书馆的代码.它似乎class activate包含正确的方法,但不确定整体应该如何编排.
提前致谢!
kmm*_*vnr 12
Flows还有两个额外的Start内置任务可供使用
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)
Run Code Online (Sandbox Code Playgroud)
StartSignal - 启动django信号接收流程:
class SignalFlow(Flow):
start = flow.StartSignal(some_signal, create_flow) \
.Next(this.end)
Run Code Online (Sandbox Code Playgroud)
您可以在此viewflow测试套件中检查它们的使用情况以及其余的内置任务.
要手动处理任务状态,首先应从数据库中获取任务,激活它,然后调用任何激活方法.
task = MyFlow.task_cls.objects.get(...)
activation = task.activate()
if activation.undo.can_proceed():
activation.undo()
Run Code Online (Sandbox Code Playgroud)
任何激活转换都有.can_proceed()方法,帮助您检查,是否处于允许转换状态的任务.
| 归档时间: |
|
| 查看次数: |
4307 次 |
| 最近记录: |