工作流:工作流是带有选项的复杂表单,每个工作流必须包含扩展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. npm安装vue

    目录 npm安装vue Vue.js 是什么 直接用script引入 安装vue 对不同构建版本的解释 安装命令行工具 (CLI) 安装cnpm 安装vue-cli 新建vue项目 运行服务 目录结构 ...

  2. SDN负载均衡

    我负责的工作: (1).前期工作思路设计及方案选定.讲解 (2).后期代码修正 (3).视频制作 负载均衡程序 程序流程图 代码 from mininet.topo import Topo class ...

  3. Ecstore Linux服务器环境基本配置

    Nginx基本配置(另存为nginx.conf直接可以使用): #user nobody; worker_processes 1; error_log logs/error.log; #error_l ...

  4. google浏览器window.onbeforeunload方法兼容问题

    window.onbeforeunload方法在IE内核浏览器是有效的,但是在google浏览器中并不兼容,请教给位怎么在google浏览器中兼容window.onbeforeunload方法 采纳的 ...

  5. json 压缩中文不转码

    $testJSON=array('name'=>'中文字符串','value'=>'test'); echo json_encode($testJSON, JSON_UNESCAPED_U ...

  6. 随手练——ZOJ 1093 Monkey and Banana(动态规划)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93 一堆科学家研究猩猩的智商,给他M种长方体,每种N个. 然后,将一个 ...

  7. MetaMask/eth-block-tracker

    https://github.com/MetaMask/eth-block-tracker A JS module for keeping track of the latest Ethereum b ...

  8. 节点的启动与关闭 ros::init()解析(c++)

    1.初始化roscpp 节点 ros::init()  API链接:http://docs.ros.org/api/roscpp/html/init_8h.html 在node代码中在调用其它rosc ...

  9. OpenCV——输入输出XML和YAML文件

  10. nodeJS-使用buffer类处理二进制数据

    使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...