「Viewflow」とは、ワークフローを作成することのできるdjangoアプリです。サンプルワークフローを導入する手順を記載しています。
導入手順
- Git bashを管理者として実行し、仮想環境を任意のフォルダに作成し、仮想環境を起動します。
python -m venv env
source env/Scripts/activate
- 必要なパッケージを仮想環境にインストールします。
pip install django==3.2.10
pip install django-viewflow==1.10.1
pip install django-material==1.10.0
- Djangoプロジェクトを作成し、プロジェクトのディレクトリに移動します。
django-admin startproject demo
cd demo
- helloworldというサンプルアプリを作成します。
python manage.py startapp helloworld
demo/settings.py
をエディタで開き、INSTALLED_APPS
にmaterial
以下の5つを追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'material',
'material.frontend',
'viewflow',
'viewflow.frontend',
'helloworld',
]
demo/urls.py
をエディタで開き、WebアプリのURLを定義します。
from django.urls import include, path
from django.views import generic
from material.frontend import urls as frontend_urls
urlpatterns = [
path(r'', generic.RedirectView.as_view(url='/workflow/', permanent=False)),
path(r'', include(frontend_urls)),
]
helloworld/models.py
をエディタで開き、text
とapproved
という2つの項目を含むモデルを作成します。
from django.db import models
from viewflow.models import Process
# Create your models here.
class HelloWorldProcess(Process):
text = models.CharField(max_length=150)
approved = models.BooleanField(default=False)
helloworld/flows.py
をエディタで開き、フローを定義します。
from viewflow import flow, frontend
from viewflow.base import this, Flow
from viewflow.flow.views import CreateProcessView, UpdateProcessView
from .models import HelloWorldProcess
@frontend.register
class HelloWorldFlow(Flow):
process_class = HelloWorldProcess
start = (
flow.Start(
CreateProcessView,
fields=["text"]
).Permission(
auto_create=True
).Next(this.approve)
)
approve = (
flow.View(
UpdateProcessView,
fields=["approved"]
).Permission(
auto_create=True
).Next(this.check_approve)
)
check_approve = (
flow.If(lambda activation: activation.process.approved)
.Then(this.send)
.Else(this.end)
)
send = (
flow.Handler(
this.send_hello_world_request
).Next(this.end)
)
end = flow.End()
def send_hello_world_request(self, activation):
print(activation.process.text)
- helloworldアプリのマイグレーションをします。
python manage.py makemigrations helloworld
python manage.py migrate
- アドミンユーザーを作成します。
winpty python manage.py createsuperuser
- サーバーを起動します。
python manage.py runserver
- 以下のURLをブラウザで開き、ワークフローのアプリが起動されていることを確認します。
http://127.0.0.1:8000