Как создать программный процесс Django ViewFlow

конспект

Я разрабатываю веб-приложение для изучения Django (python 3.4 и Django 1.6.10). Веб-приложение имеет сложные и часто обновляемые рабочие процессы. Я решил интегрировать библиотеку Django-Viewflow ( https://github.com/viewflow/viewflow/ ), поскольку она кажется очень удобным способом обработки рабочих процессов и не включает логику рабочего процесса с моделями приложений.

В этом случае я создал рабочий процесс для сбора авторской информации и авторских прав с использованием библиотеки Django-Viewflow. Рабочий процесс следует начинать каждый раз, когда автор добавляется в книгу.

Моя проблема

В документации предлагаются пошаговые инструкции для интеграции сквозного решения worklfow (frontend и backend). Моя проблема заключается в том, что мне сложно контролировать рабочий процесс программно (в частности, из модели книги).

Описание приложения

У меня есть модель книги (базовая модель) со многими для многих отношений с авторами.

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 содержит правильный метод, но не уверен, как все это должно быть организовано.

Заранее спасибо!

One Solution collect form web for “Как создать программный процесс Django ViewFlow”

Для потоков доступны две дополнительные стартовые задачи

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) 

Вы можете проверить использование для них и остальную часть встроенной задачи в этом наборе тестовых тестов .

Чтобы вручную обработать состояние задачи, сначала вы должны получить задачу из базы данных, активировать ее и вызвать любой способ активации.

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

Любой переход активации имеет .can_proceed() , который помогает вам проверять, является ли задание в состоянии, которое разрешает переход.

Python - лучший язык программирования в мире.