zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【Go语言入门系列】Go语言工作目录介绍及命令工具的使用
    【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
    【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
    【Go语言入门系列】(八)Go语言是不是面向对象语言?
    【Go语言入门系列】(七)如何使用Go的方法?
    趣解计算机网络(一)之入门概念介绍
    Go语言入门系列(六)之再探函数
    redis数据类型&操作命令
    从Linux源码看Socket(TCP)的accept
    从Linux源码看TIME_WAIT状态的持续时间
  • 原文地址:https://www.cnblogs.com/gm332211/p/9430526.html
Copyright © 2011-2022 走看看