在 viewflow.frontend 之外处理视图
Process Views outside viewflow.frontend
我想在标准 viewflow.frontend
之外集成进程、启动它们等。为此,我一直在尝试创建一个简单的页面,在那里我可以开始一个新的流程,但一直在努力寻找一种方法来实现它。
一种方法是定义 url 到 url('^start_something, CustomStartView.as_view())
,CustomStartView
从 viewflow.flow.views.start
子class 到 CreateProcessView
。每当我修复一个错误时,这都会导致一个又一个错误。我现在很确定这不是正确的方法,也是因为 View
被用作 Flow
class 本身的参数并且可能需要以不同的方式使用比一般的看法。
正确的做法是什么?
Viewflow 视图需要通过 flow_class
和 flow_task
实例进行参数化。因此,您可以包含一个开始视图,如下所示::
url('^start/', CreateProcessView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.start})
要添加任务视图URL配置,您需要使用process_pk
和task_pk
参数
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/', ApproveView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
})
对于每个节点,您还可以启用详细信息和各种操作 URLs,例如:
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/detail/', DetailTaskView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
}),
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/cancel/', CancelTaskView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
}),
所有这些都非常麻烦。
推荐方式
您可以只包含 Flow.instance.urls
,其中包含收集的所有 URL 并准备好包含到 URL 配置中。
url('^myflow', include(MyFlow.instance.urls, namespace='myflow'))
最后,要启用任务列表视图,您可以手动输入 URL 个条目,例如
url('^myflow/inbox/', TaskListView.as_view(), {
'flow_class': MyFlow}, name="tasks")
或仅用作 viewflow.flow.viewset.FlowViewSet
class
myflow_urls = FlowViewSet(MyFlow).urls
urlpatterns = [
url(r'^myflow/', include(myflow_urls, namespace='myflow'))
]
这是将 viewflow URLs 包含到 django URL 配置中的推荐方法。要自定义该 URL 配置中使用的视图,您可以子 class FlowViewSet class 并在节点定义中提供视图,ex
class MyFlow(Flow):
start = flow.Start(detail_view_class=MyDetailTaskView)
对于示例用法,您可以查看 Viewflow Custom UI 食谱示例 - https://github.com/viewflow/cookbook/tree/master/custom_ui
我想在标准 viewflow.frontend
之外集成进程、启动它们等。为此,我一直在尝试创建一个简单的页面,在那里我可以开始一个新的流程,但一直在努力寻找一种方法来实现它。
一种方法是定义 url 到 url('^start_something, CustomStartView.as_view())
,CustomStartView
从 viewflow.flow.views.start
子class 到 CreateProcessView
。每当我修复一个错误时,这都会导致一个又一个错误。我现在很确定这不是正确的方法,也是因为 View
被用作 Flow
class 本身的参数并且可能需要以不同的方式使用比一般的看法。
正确的做法是什么?
Viewflow 视图需要通过 flow_class
和 flow_task
实例进行参数化。因此,您可以包含一个开始视图,如下所示::
url('^start/', CreateProcessView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.start})
要添加任务视图URL配置,您需要使用process_pk
和task_pk
参数
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/', ApproveView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
})
对于每个节点,您还可以启用详细信息和各种操作 URLs,例如:
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/detail/', DetailTaskView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
}),
url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/cancel/', CancelTaskView.as_view(), {
'flow_class': MyFlow,
'flow_task': MyFlow.approve
}),
所有这些都非常麻烦。
推荐方式
您可以只包含 Flow.instance.urls
,其中包含收集的所有 URL 并准备好包含到 URL 配置中。
url('^myflow', include(MyFlow.instance.urls, namespace='myflow'))
最后,要启用任务列表视图,您可以手动输入 URL 个条目,例如
url('^myflow/inbox/', TaskListView.as_view(), {
'flow_class': MyFlow}, name="tasks")
或仅用作 viewflow.flow.viewset.FlowViewSet
class
myflow_urls = FlowViewSet(MyFlow).urls
urlpatterns = [
url(r'^myflow/', include(myflow_urls, namespace='myflow'))
]
这是将 viewflow URLs 包含到 django URL 配置中的推荐方法。要自定义该 URL 配置中使用的视图,您可以子 class FlowViewSet class 并在节点定义中提供视图,ex
class MyFlow(Flow):
start = flow.Start(detail_view_class=MyDetailTaskView)
对于示例用法,您可以查看 Viewflow Custom UI 食谱示例 - https://github.com/viewflow/cookbook/tree/master/custom_ui