工作流:工作流是带有选项的复杂表单,每个工作流必须包含扩展Workflow, Step和的类Action
1. url.py 路由处理
RESOURCE_CLASS = r'^(?P<resource_class_id>[^/]+)/%s$'
urlpatterns = [
url(RESOURCE_CLASS % 'update', UpdateView.as_view(), name='update')
] 2.views.py 视图函数
class UpdateView(workflows.WorkflowView):
workflow_class = UpdateResourceClass #获取来之url传递过来的数据,数据在self和kwargs中
def get_context_data(self, **kwargs):
#这里我们会将self和kwargs的数据传递个模板
context = super(UpdateView, self).get_context_data(**kwargs) #提供数据到上下文context中,在模板中使用context传递的数据
context["resource_class_id"] = self.kwargs['resource_class_id'] return context #获取url中的数据,处理成需要的数据对象
def _get_object(self, *args, **kwargs): #这个方法调用api获取数据对象传递给上下文context
resource_class_id = self.kwargs['resource_class_id'] #初始化数据
def get_initial(self):
#获得api获取的对象列表
resource_class = self._get_object()
return {'resource_class_id': resource_class.id,
'name': resource_class.name,
'service_type': resource_class.service_type} 3.workflows.py 工作流处理
1.执行动作类
class ResourcesAction(workflows.Action):
#定义了一个表单输入框(提交数据的地方)
name = forms.CharField(max_length=255,
label=_("Testing Name"),
help_text="",
required=True) #处理用户表单的数据
def handle(self, request, data):
pass
#如果我们想要使用url中的数据必须通过views get_initial函数获取和depends_on列表中列出
self.initial['resource_class_id'] or data['resource_class_id']. #如果想要获取传递数据需要contribute函数安正确的步骤获取数据 2.步骤流程类(获取提交的信息类)
class UpdateResources(workflows.Step): action_class = ResourcesAction #将数据传递到Workflow的上下文的函数
#contributed函数获取url传递数据提供给Workflow的上下文
depends_on = ("resource_class_id",) #调用contributes函数并定义需要获取的字段#resources_object_ids索引
contributes = ("resources_object_ids", "name") #获取额外提交的数据
def contribute(self, data, context):
#从workflow中获取http请求
request = self.workflow.request
if data:
#如果想要获取其他提交的数据需要把这个数据写入到上下文中
context["resources_object_ids"] =\
request.POST.getlist("resources_object_ids") #合并上下文中新的数据
context.update(data)
return context 3.工作流类
class UpdateResourceClass(workflows.Workflow):
#定义他的步骤类
default_steps = (UpdateResources,) #最终处理函数
def handle(self, request, data):
pass
#最后一个方法(在所有动作处理方法后),所有step的数据都在这里(contributes和depends_on数据)
#data["resources_object_ids"], data["name"] and data["resources_class_id"] are available here. 参考文档 https://docs.openstack.org/horizon/latest/contributor/topics/workflows.html

openstack horizon 开发第三天的更多相关文章

  1. openstack horizon 开发第二天

    依照上次的简单的仪表盘添加动作额外添加或修改的文件mydashboard/├── mypanel│   ├── forms.py│   ├── tables.py│   ├── templates│  ...

  2. openstack horizon开发第一天

    horizon插件构造 创建一个dashboardmkdir opesntack_dashboard/dashboards/mydashboardpython manage.py startdash ...

  3. 怎样修改 Openstack Horizon(Dashboard)的显示界面 (一)

    Openstack 有很多项目,比如 nova 是虚拟机管理,neutron 是虚拟网络管理, glance 是存储管理,而 horizon 是负责 Openstack 的统一界面.horizon 的 ...

  4. openstack horizon CSS 离线 改动

    Openstack horizon 的CSS主要保存在几个文件夹中,各自是horizon/static/dashboard/scss;horizon/openstack_dashboard/stati ...

  5. openstack horizon 学习(3) DataTable

    上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...

  6. C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

    系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...

  7. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  8. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  9. 8天玩转并行开发——第三天 plinq的使用

    原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...

随机推荐

  1. Java学习---面试基础知识点总结

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...

  2. 解决:Windows 强制升级为8.1之后 Mysql连接不上, VisualSVN Server无服务

    1.mysql 连不上,只要将mysql重新加为windows服务即可.(我的是mysql-5.6.24-winx64 解压版)    方法:mysqld --install mysql --defa ...

  3. 团队作业——Alpha冲刺 7/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:将编辑界面与标题栏合并.与同队成员,讨论部分功能合并的问题. 明日任务:编辑界面与另一队员完成的字体设置弹窗合并. 郭剑南 今日任务:使用 ...

  4. ICP点云配准原理及优化

    ICP算法简介 根据点云数据所包含的空间信息,可以直接利用点云数据进行配准.主流算法为最近迭代算法(ICP,Iterative Closest Point),该算法是根据点云数据首先构造局部几何特征, ...

  5. 经典Paxos算法笔记

    介绍 Paxos算法是一个高容错性的分布式一致性算法.去年学习过Paxos算法,一直没将整理到博客.现在将经典Paxos算法相关内容整理到博客上. 经典Paxos算法本身也并不是太难理解,Lampor ...

  6. 【转】Android 4.4中播放HTML5视频<video>的Bug

    近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...

  7. php api接口安全设计 sign理论

    一. url请求的参数包括:timestamp,token, username,sign 1. timestamp: 时间戮 2. token: 登陆验证时,验证成功后,生成唯一的token(可以为u ...

  8. laytpl js模板引擎

    laytpl js模板引擎.laytpl是一款非常轻量的JavaScript模板引擎.地址:http://www.layui.com/laytpl/ 用法与handlebar.js类似,但是比较轻量级 ...

  9. 在main函数前后执行的函数之 C语言

    在gcc中,可以使用attribute关键字,声明constructor和destructor,来指定了函数在main之前或之后运行,代码如下: #include <stdio.h> __ ...

  10. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...