我想构建一个Django解决方案,该解决方案可以实时定义和更改工作流,希望通过更新BPMN图表而无需更改源代码和重新部署。
尽管在Java中(例如Camunda和Bizagi)这种功能已经存在了相当长的时间,但在Django的上下文中,由于我搜索的常规位置并没有提供令人满意的答案,因此似乎没有引起同样的兴趣。对2011年类似问题的回答显示,“工作流”一词如此广泛,可能意味着很多事情。但是,经过仔细检查,它似乎可以归结为两种方法:基于Django的工作流和BPMN引擎。
Github和Django软件包中列出的基于Django的工作流的问题在于,最流行/最稳定的工作流(例如Viewflow或ActivFlow)提供了某种框架来简化状态和过渡的实现,但最终,每当利益相关者改变对流程的想法时,您需要手工编写更改代码。很棒的Django列表中找到的最有前途的选项是django-river,它至少将工作流的状态和转换作为Django模型存储在数据库中,因此您可以随时进行更改。
另一个大方法是BPMN引擎。在弄乱了几个纯Python(非Django)选项之后,我设法使用bpmn_dmn使SpiffWorkflow正常工作。现在,我可以加载用Camunda Modeler制作的.bpmn图和.dmn表,并通过引擎运行它们,以基于一些参数获得最终事件。
from bpmn_dmn.bpmn_dmn import BPMNDMNXMLWorkflowRunner
filename = 'rates.bpmn'
runner = BPMNDMNXMLWorkflowRunner(filename, debugLog='DEBUG', debug=False)
data = {'size': 150, 'type': 'SH', 'country': 'US'}
runner.start(**data)
res = runner.getEndEventName()
print(res)
Run Code Online (Sandbox Code Playgroud)
这是直接且有用的,足以运行不需要人工干预的小型工作流程。但是,我仍然需要弥合从.bpmn图定义加载的工作流与Django解决方案固有的Views / Forms / Model状态之间的转换之间的鸿沟。
到目前为止,我最好的选择似乎是将工作流规范从SpiffWorflow转换为django-river模型数据库中的状态/转换记录,但是我想知道是否还有更好的选择。
我想将我们的图书馆管理系统(OLIB)与亚马逊的帐户同步,以便跟踪我们购买的电子书.这甚至可能吗?我最接近的是亚马逊的产品广告API:
https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html
然而,它似乎与亚马逊的产品列表一起使用,但没有提及如何访问我的帐户来管理我购买的Kindle电子书.
有任何想法吗?提前致谢.