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只是串行代码,在并行的 年代如果 ...
随机推荐
- 邮件客户端修改密码—OWA
邮件客户端修改密码—OWA 1.登录OWA 2.输入用户名 3.点击选项 4.更改密码
- NetworkX 图网络处理工具包
简单介绍 NetworkX is a Python package for the creation, manipulation, and study of the structure, dynami ...
- Alpha冲刺报告(10/12)(麻瓜制造者)
今日已完成 邓弘立: 实现了登录的所有功能 符天愉: 有点事没有参与冲刺- 江郑: 刘双玉: 写商品下架接口说明的时候,就发现一个bug,因为私人原因中间离开了很长时间,最后修改完成就很晚了. 困难: ...
- postMessage 消息传递
点击查看demo 前言 web开发了,除了前台与服务器交换数据,还有可能前台页面间需要进行数据传递,比如窗口间,页面和嵌套的iframe间.这些问题之前都有解决办法,但是现在html5引入的messa ...
- HBase概念学习(九)HTablePool为何弃用?
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jiq408694711/article/details/36526433 转载请注明出处:jiq•钦 ...
- 【转】默认网关有什么用?我应当怎么填写默认网关和DNS呢
默认网关有什么用?我应当怎么填写默认网关和DNS呢? 目前使用的是pppoe方式上网,无猫,只是将一根入户的网线插在无线路由上面,然后在路由中设置ppoe方式上网,输入帐号密码.一般电脑和手机全设成了 ...
- MetaMask/provider-engine-3-test
通过看其test的代码去好好看看它是怎么使用的 1. provider-engine/test/basic.js const test = require('tape') const Provider ...
- OC4J Configuration issue. /u01...dbhome_1/oc4j/j2ee/OC4J_DBConsole_orcl-db-01_orcl not found.
emctl start dbconsole 报错信息: OC4J Configuration issue. /u01/app/Oracle/product/11.2.0/dbhome_1/oc4j/j ...
- vue实例的属性和方法
vue实例的属性和方法 1. 属性 vm.$el #指定要绑定的元素 vm.$data #Vue 实例的数据对象 vm.$options #获取自定义属性的值 new Vue({ customOpti ...
- 安装的 Linux 软件包有多少?
导读 你有没有想过你的 Linux 系统上安装了几千个软件包? 是的,我说的是“千”. 即使是相当一般的 Linux 系统也可能安装了上千个软件包. 有很多方法可以获得这些包到底是什么包的详细信息. ...