openstack之horizon源码分析之二
一、概述:
django基础入手:
django新建project:#django-admin startproject mysite
生成如下目录:
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
创建一个app,名叫demo:#cd mysite; pythone manage.py startapp demo
则生成如下目录:
demo/
├── __init__.py
├── admin.py
├── models.py
├── tests.py
└── 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之horizon源码分析之二的更多相关文章
- openstack之horizon源码分析
一.基础准备: Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizo ...
- horizon源码分析(一)
源码版本:H版 一.写在前面 本来应该搭建horizon的development环境的,这样方便debug,但是由于各种报错,本人没有搭建成功,这也导致有很多源码疑问没有解决,后续可以继续补充这一部分 ...
- DataTable源码分析(二)
DataTable源码分析(二) ===================== DataTable函数分析 ---------------- DataTable作为整个插件的入口,完成了整个表格的数据初 ...
- 一个普通的 Zepto 源码分析(二) - ajax 模块
一个普通的 Zepto 源码分析(二) - ajax 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块,以 ...
- Zepto源码分析(二)奇淫技巧总结
Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...
- Koa源码分析(二) -- co的实现
Abstract 本系列是关于Koa框架的文章,目前关注版本是Koa v1.主要分为以下几个方面: Koa源码分析(一) -- generator Koa源码分析(二) -- co的实现 Koa源码分 ...
- Unity时钟定时器插件——Vision Timer源码分析之二
Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...
- Tomcat源码分析(二)------ 一次完整请求的里里外外
Tomcat源码分析(二)------ 一次完整请求的里里外外 前几天分析了一下Tomcat的架构和启动过程,今天开始研究它的运转机制.Tomcat最本质就是个能运行JSP/Servlet的Web ...
- spark 源码分析之二十一 -- Task的执行流程
引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...
随机推荐
- atomic_compare_exchange
atomic_compare_exchange 分为两个版本 atomic_compare_exchange_strong 和 atomic_compare_exchange_weak,语义如下 bo ...
- 2014.8.15模拟赛【公主的工作】&&bzoj1046[HAOI2007]上升序列
bzoj题目是这样的 Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm ...
- Java实现二叉搜索树的添加,前序、后序、中序及层序遍历,求树的节点数,求树的最大值、最小值,查找等操作
什么也不说了,直接上代码. 首先是节点类,大家都懂得 /** * 二叉树的节点类 * * @author HeYufan * * @param <T> */ class Node<T ...
- poj 1734 Sightseeing trip_ 最小环记录路径
题意:求最出小环,输出路径 #include <iostream> #include<cstdio> using namespace std; #define N 110 #d ...
- OpenStack securityGroup rule Set
OpenStack DBaas 云数据即服务之☞troveError
- pushMeBaby,github链接
https://github.com/stefanhafeneger/PushMeBaby
- iOS伪实现打地鼠游戏
打地鼠是一款可以用iOS知识来实现的一种游戏.其核心技术就是通过imageView来播放动画,点击button时来停止当前播放的动画开始击打地鼠的动画.话不多说直接上代码. 这是添加当前的背景图片,然 ...
- spring-android的使用【转】
android + Spring RESTful 简单登录 (spring3实现服务端 rest api) https://github.com/spring-projects/spring-and ...
- CF 444A(DZY Loves Physics-低密度脂蛋白诱导子图)
A. DZY Loves Physics time limit per test 1 second memory limit per test 256 megabytes input standard ...
- [DevExpress]图表开发工具类 ChartUtils
/// <summary> /// 基于.NET 3.5的Chart工具类;对应的DevExpress版本:12.1.7; /// </summary> public stat ...