zoukankan      html  css  js  c++  java
  • openstack之horizon源码分析

    一、基础准备:

      Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格。网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的 jinja,mako,nodejs中有jade), 用户向webserver发起请求之后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返回给浏览器,浏览器渲染页面。一般模板语言都有继承(extend),插入(include)等特性,来提高页面的复用率。

       Horizon做得就更彻底一些,它将页面上所有元素模块化,网页中一些常见元素,表单,表格,标签页,全部封装成Python类,每个组件有自己 对应的一小块html模板.当渲染整个页面的时候,Horizon先找到当前页面有多少组件,将各个组件分别进行渲染变成一段html片段,最后拼装成一 个完整的html页面,返回浏览器。

         总结Horizon的特点:

    • 页面元素模块化
    • 子面板可插
    • All in One(从部署上来说,Horizon只有它自己这一个组件)

    二、分析horizon

      1、horizon设计分为三层:Dashboard->PanelGroup->Panel 

        a、project普通用户登录后看到的是项目面板

        b、admin管理登录看到可见左测的管理员面板

        c、settings右上角的设置面板

        d、identity不同的角色登录之后,左侧的“身份”面板,可设置项目用户

        e、交换机管理面板

      每个dashboard都是django中的一个app,django中的app可以理解成对业务逻辑模块化的一种手段,里面可以包含自己独有的url设定,模板和业务逻辑代码。每个dashboard下定义了一系列的PanelGroup,虚拟机管理对应到界面上就是一个PanelGroup(ManageCompute),里面有一系列的子panel(Overview、Instance、Volumes...). swift, heat, neutron的管理面板自都是一个PanelGroup,底下有各自的子Panel。

      2、项目结构

        Horizon项目核心的代码包有两个:openstack-dashboardpython-django-horizon

        第一个包是控制台代码的具体实现,是一个基于Django框架的web应用,安装后主要文件在/usr/share/openstack-dashboard/路径下。第二个包是通用的一些Python类库,也包括一些静态文件,安装后在/usr/lib/python2.7/dist-packages/horizon下。定制化开发,主要是修改业务代码,基本不需要修改python-django-horizon,所以我们分析的重点放在openstack-dashboard这个包上。

       图中的7个名词在代码中都可以对应上,代码的层级结构还是很清晰的。

  • 相关阅读:
    Spark Streaming:大规模流式数据处理的新贵
    HBase源码学习系列
    Hadoop源码分析之Configuration
    sql server存储引擎启动错误(SQL Server could not spawn FRunCM thread)
    Redis(1.15)Redis监控(待写)
    Redis(1.14)Redis日常管理与维护
    Redis(1.13)Redis cluster 分布式集群手动配置
    (5.3.5)数据库迁移——数据库与文件组的位置迁移(同一实例)
    Redis(1.12)Redis cluster搭建常见错误
    Redis(1.11)Redis4.0.11 cluster 分布式集群搭建
  • 原文地址:https://www.cnblogs.com/chris-cp/p/6012590.html
Copyright © 2011-2022 走看看