openstack horizon 开发第三天
工作流:工作流是带有选项的复杂表单,每个工作流必须包含扩展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 开发第三天的更多相关文章
- openstack horizon 开发第二天
依照上次的简单的仪表盘添加动作额外添加或修改的文件mydashboard/├── mypanel│ ├── forms.py│ ├── tables.py│ ├── templates│ ...
- openstack horizon开发第一天
horizon插件构造 创建一个dashboardmkdir opesntack_dashboard/dashboards/mydashboardpython manage.py startdash ...
- 怎样修改 Openstack Horizon(Dashboard)的显示界面 (一)
Openstack 有很多项目,比如 nova 是虚拟机管理,neutron 是虚拟网络管理, glance 是存储管理,而 horizon 是负责 Openstack 的统一界面.horizon 的 ...
- openstack horizon CSS 离线 改动
Openstack horizon 的CSS主要保存在几个文件夹中,各自是horizon/static/dashboard/scss;horizon/openstack_dashboard/stati ...
- openstack horizon 学习(3) DataTable
上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...
- C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- 8天玩转并行开发——第三天 plinq的使用
原文 8天玩转并行开发——第三天 plinq的使用 相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的 年代如果 ...
随机推荐
- Windows XP添加硬盘后系统不能识别(没有任何反应)
解决方法: 1.右键我的电脑--管理--设备管理器--IDE ATA/ATAPI控制器,启用次要IDE通道和主要IDE通道,打开属性,在高级设置里,将设备类型设置为自动检测,重启. 2.硬盘格式为GP ...
- Windows 下的文件被占用问题解决
windows下,经常容易出现文件被其他程序占用的现象,令人十分头疼.更头疼的是,还看不到被谁占用. 实际上是有办法看到占用的进程的. 话不多说,以Win10为例: 1.打开资源监视器 a.直接程序栏 ...
- 乘风破浪:LeetCode真题_031_Next Permutation
乘风破浪:LeetCode真题_031_Next Permutation 一.前言 这是一道经典的题目,我们实在想不出最好的方法,只能按照已有的方法来解决,同时我们也应该思考一下为什么要这样做?是怎么 ...
- Priority Queue
优先队列 集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素.优先队列有很多应 ...
- 4、url控制系统
第1节:简单配置 参考代码: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/ ...
- Spark项目之电商用户行为分析大数据平台之(十二)Spark上下文构建及模拟数据生成
一.模拟生成数据 package com.bw.test; import java.util.ArrayList; import java.util.Arrays; import java.util. ...
- Redis未授权漏洞利用方式
总结一下redis未授权拿shell: redis-cli -h ip >info 查看系统类型 Windows: 1.找网站绝对路径 2.config set dir 绝对路径根路径 conf ...
- JavaScript 删除数组中的对象
1.获得对象在数组中的下标 function (_arr,_obj) { var len = _arr.length; for(var i = 0; i < len; i++){ if(_arr ...
- 批量下载,多文件压缩打包zip下载
0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...
- 关于NLB的群集操作模式知识 (转载)
单播:单播模式是指各节点的网络适配器被重新指定了一个虚拟MAC(由02-bf和群集IP地址组成确保此MAC的唯一性).由于所有绑定群集的网络适配器的MAC都相同,所以在单网卡的情况下,各节点之间是不能 ...