百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Horizon代码分析

suiw9 2025-01-20 16:19 28 浏览 0 评论

1.整体目录

2.horizon目录

3.openstack-dashboard目录

一、基础准备:

  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的源码中,包含两个代码文件夹:

      1、horizon     2、openstack_dashboard

    Horizon这个包是一些在django基础上写的通用组件,表格(table), 标签页(tab),表单(form), 面包屑导航(browser), 工作流(workflow),这些代码和openstack的具体业务逻辑没啥关系,如果做一个新的django项目,理论上可以复用Horizon这个包中的代码。horizon/base.py中还实现了一套dashboard/panel机制,使得Horizon面板上所有的dashboard都是”可插拔”的,所有的panel都是”动态加载”的。

   openstack_dashboard/dashboards/中是各个面板的具体实现代码,其中包括各个面板的模板文件, 和后端service交互的业务逻辑代码等。

   对重要目录做一个介绍,有些目录目前还没有接触到还不清楚具体的作用:

1 horizon

2 ./doc: horizon相关帮助性文档

3 ./horizon:horizon通用组件库

4 ./browsers:

5 ./conf:Horizon配置文件

6 ./contrib:

7 ./forms:form表单基类包

8 ./locale:国际化语言包

9 ./management:manage.py startdash/startpanel命令

10 ./static:horizon静态文件包

11 ./tables:table基类包

12 ./tabs:tab基类包

13 ./templates:模板文件基类

14 ./templatetags:模板标签基类

15 ./test:测试包

16 ./utils:工具包

17 ./workflows:工作流机制包

18 ./openstack_dashboard:horizon各个面板的具体实现代码

19 ./api:调用nova、swift、glance等接口封装

20 ./conf:nova、cinder等API访问权限控制,叫 xxx_policy.json,里 面定义了鉴权用的rules。

21 ./dashboards:Horizon界面展示各个模块实现目录。

22                   ./admin:管理员界面

23                     ./instances:云主机管理界面

24                       ./templates:云主机html界面模板

25                       ./forms.py:form表单实现

26                       ./panel.py:实现panel注册到dashbord

27                       ./tables.py:table实现

28                       ./tests.py:测试

29                       ./urls.py:url映射

30                       ./views.py:url映射的视图

31                  ...32                 ./identity:项目、用户管理界面

33                 ./project:普通用户项目界面

34                 ./router:

35                 ./settings:设置界面

36 ./django_pyscss_fix:

37 ./enabled:控制导航加载哪些模块显示出来。

38 ./local:本地配置文件

39 ./locale:本地国家化语言包

40 ./management:定义安装apache、horizon等是配置文件的

41 模板文件。

42 ./openstack:log、_i18n等包

43 ./static:horizon静态包

44 ./templates:horizon模板包

45 ./templatetags:horizon模板标签包

46 ./test:测试包

47 ./usage:Horizon概况页面资源统计实现包

48 ./utils:工具包

49 ./wsgi:wsgi包

50 ./tool: horizon工具包

51 ./manage.py :

相关推荐

看完这一篇数据仓库干货,终于搞懂什么是hive了

一、Hive定义Hive最早来源于FaceBook,因为FaceBook网站每天产生海量的结构化日志数据,为了对这些数据进行管理,并且因为机器学习的需求,产生了Hive这们技术,并继续发展成为一个成...

真正让你明白Hive参数调优系列1:控制map个数与性能调优参数

本系列几章系统地介绍了开发中Hive常见的用户配置属性(有时称为参数,变量或选项),并说明了哪些版本引入了哪些属性,常见有哪些属性的使用,哪些属性可以进行Hive调优,以及如何使用的问题。以及日常Hi...

HIVE SQL基础语法(hive sql是什么)

引言与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。HIVE不适合用于联机事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据...

[干货]Hive与Spark sql整合并测试效率

在目前的大数据架构中hive是用来做离线数据分析的,而在Spark1.4版本中spark加入了sparksql,我们知道spark的优势是速度快,那么到底sparksql会比hive...

Hive 常用的函数(hive 数学函数)

一、Hive函数概述及分类标准概述Hive内建了不少函数,用于满足用户不同使用需求,提高SQL编写效率:...

数仓/数开面试题真题总结(二)(数仓面试时应该讲些什么)

二.Hive...

Tomcat处理HTTP请求流程解析(tomcat 处理请求过程)

1、一个简单的HTTP服务器在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单...

Python 高级编程之网络编程 Socket(六)

一、概述Python网络编程是指使用Python语言编写的网络应用程序。这种编程涉及到网络通信、套接字编程、协议解析等多种方面的知识。...

[904]ScalersTalk成长会Python小组第20周学习笔记

Scalers点评:在2015年,ScalersTalk成长会Python小组完成了《Python核心编程》第1轮的学习。到2016年,我们开始第二轮的学习,并且将重点放在章节的习题上。Python小...

「web开发」几款http请求测试工具

curl命令CURL(CommandLineUniformResourceLocator),是一个利用URL语法,在命令行终端下使用的网络请求工具,支持HTTP、HTTPS、FTP等协议...

x-cmd pkg | hurl - 强力的 HTTP 请求测试工具,让 API 测试更加简洁高效

简介...

Mac 基于HTTP方式访问下载共享文件,配置共享服务器

方法一:使用Python的SimpleHTTPServer进行局域网文件共享Mac自带Python,所以不需要安装其他软件,一条命令即可...

Python 基础教程十五之 Python 使用requests库发送http请求

前言...

使用curl进行http高并发访问(php curl 大量并发获得结果)

本文主要介绍curl异步接口的使用方式,以及获取高性能的一些思路和实践。同时假设读者已经熟悉并且使用过同步接口。1.curl接口基本介绍curl一共有三种接口:EasyInterface...

Django 中的 HttpResponse理解和用法-基础篇1

思路是方向,代码是时间,知识需积累,经验需摸索。希望对大家有用,有错误还望指出。...

取消回复欢迎 发表评论: