• 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
  • 相关阅读:
    js拖动窗口 用层模拟可移动的小窗口
    tar命令详解
    linux内核编译过程的最终总结版
    用C#写ASP.NET搜索蜘蛛代码程序
    ID 为 333 的事件被添加到基于 Windows Server 2003 的计算机上的系统日志中的补丁下载地址
    简单实用的C#分词源代码(含词库素材下载)
    CSS截取固定长度字符串
    javascript 常用代码技巧大收集
    C# 特性(Attribute)
    关于iis HTTPERR日志
  • 原文地址:https://www.cnblogs.com/gm332211/p/9430526.html
Copyright © 2020-2023  润新知