openstack之horizon源码分析之二

简介: 一、概述:  django基础入手:    django新建project:#django-admin startproject mysite1 生成如下目录:2 mysite3 ├── manage.

一、概述:

  django基础入手:

    django新建project:#django-admin startproject mysite

1 生成如下目录:
2 mysite
3 ├── manage.py
4 └── mysite
5 ├── __init__.py
6 ├── settings.py
7 ├── urls.py
8 └── wsgi.py

    创建一个app,名叫demo:#cd mysite; pythone manage.py startapp demo 

1 则生成如下目录:
2 demo/
3 ├── __init__.py
4 ├── admin.py
5 ├── models.py
6 ├── tests.py
7 └── views.py

    把我们新定义的app加到settings.py中的INSTALL_APPS中

    修改 mysite/mysite/settings.py

             ROOT_URLCONF = 'openstack_dashboard.urls'      -- 查看绑定的urls (openstack_dashboard/urls.py)
    INSTALLED_APPS = (
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',

      'demo', --here
    )
    备注,这一步是干什么呢? 新建的 app 如果不加到 INSTALL_APPS 中的话, django就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)

   类比一下:

    my_horizon(应该叫horizon)目录下的openstack_dashboard 相当于第二层的mysite;而horizon/horizon相当于demo
    第二层的horizon被导入到my_horizone/openstack_dashboard/settings.py中,则根据py特性,Python中在导入一个包时,实际上导入了它的__init__.py文件,当我们导入Horizon这个包的时候,__init__.py文件自动运行,在__init__.py 文件中再导入其他的包,或者模块。其中在horizon包的__init__.py文件中,此时应该看my_horizon/horizon/__init__.py的这个文件; 

跳转到horizon.base.py

  horizon/base.py,不足 1000 行,整体架构的核心,从这里出发去探索。一个进程只有一个 Site,一个 Site 有多个 Dashboard,一个 Dashboard 有多个 PanelGroup,一个 PanelGroup 有多个 Panel。 而 PanelGroup 的功能很弱,只是把下面的 Panel 组合了一下,Dashboard 的 _registerable_class 是 Panel。url 是 lazy 加载的方式,只有在第一次访问时才加载;

 

相关文章
|
存储
基于OpenStack创建企业私有云(7)Horizon
Cinder是OpenStack中存储虚拟化的组件,用来存储虚拟机镜像。OpenStack从Folsom版本开始使用Cinder替换原来的Nova-Volume服务,为OpenStack云平台提供块存储服务。
578 0
基于OpenStack创建企业私有云(7)Horizon
|
存储 数据安全/隐私保护 存储虚拟化
|
Web App开发 Python
openstack之horizon源码分析
一、基础准备:   Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格。
1962 0
|
API 调度 数据库
Openstack nova-scheduler 源码分析 — Filters/Weighting
目录 目录 前言 调度器 FilterScheduler调度器的工作流程 Filters 过滤器 Filters 类型 Weighting 权重 源码实现 关键文件及其意义 阶段一nova-scheduler 接收 build_instances RPC 远程...
1992 0
|
虚拟化 API 数据库
Openstack Nova 源码分析 — 使用 VCDriver 创建 VMware Instance
目录 目录 前言 流程图 nova-compute vCenter 前言 在上一篇 Openstack Nova 源码分析 — Create instances (nova-conductor阶段) 中,记录了 nova-api 接收到创建虚拟机的请求后,在 nova-conductor 中的执行流程。
1447 0
|
API 数据库 虚拟化
Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
目录 目录 前言 Instance Flavor Instance Status Virt Driver Resource Tracker nova-conductor Create Instancenova-conductor阶段 前言 Nova 控制着一个个虚拟机的状态变迁和生命周期,这种对虚拟机生命周期的管理是由 nova-compute service 来完成的。
1674 0
|
API 数据库 安全
Openstack Nova 源码分析 — RPC 远程调用过程
目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacomputemanager 模块 最后 Nova Project Services nova-api:捕获novaclient发送过来的HTTP请求,并且将它转换为AMQP消息,通过Queue来与别的services通信。
1855 0
|
API C++ 调度
openstack 源码分析
  Nova对于底层Hypervisor(如KVM/QEMU等)的调用与管理主要通过LibvirtDriver类,nova/virt/libvirt/driver.py   Libvirt对Hypervisor的连接有两种方式:一种是只读式,用于管理;另一种是认证式,用于操作;   创建实例过程:/nova/api/ec2/cloud.
1362 0