资源描述:
《基于django的horizon设计哲学》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、HorizonIsEasy,HorizonIsComplex本文出自我的同事兼基友@monsterxx03之手,本人稍作润色如果要用一句话来概括OpenstackDashboard项口Horizon:它是一个基于djangowebframework开发的标准的pythonwsgi程序。如杲要再加一句废话,它一般会运行在webserver(apache/nginx)_L。WhyIsItEasy?说Horizon简单,是指它的部署架构简单,就是个单纯的基于django的网站,后台其至没有使用数据库。不
2、像Swift,Nova这些项目,有非常多的组件(xxx-server,xxx-api...),理清楚各个组件之间的关系,数据流的走向都要费一番功夫。Horizon用到的技术也比较传统,没冇异步非阻塞,消息队列,websocket这些比较时髦的东西(目前没有),前端也只是bootstrap+jquery+less,没有什么很前卫的东西。用户从登陆到看到虚拟机列表的这个过程的数据流走向:WhyIsItComplex?Horizon的复杂性分成两方面看:1.Horizon需耍和几乎所有的OpenStac
3、kserviceapi打交道,而且各个服务可能就还有多个api版本,api多版本的兼容不是都能在client里完成的(比如Keystone),Horizon还需要针对各个api的多版本做兼容。2.Horizon代码本身很复杂,抽象,利用了django相当多的高级特性,可以说把oop的概念运用到了极致,但这也为过度自定制Horizon带来了麻烦。DesignPhilosophyHorizon是基于django开发的,要说Horizon的设计,不得不说django,Djangofocusesonaut
4、omatingasmuchaspossibleandadherestotheDRY(Don'tRepatYourself)principle.django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格,goodorbad就见仁见智了。先说一点web开发的常识,网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的jinja,mako,nodejs屮有jade),用户向webs
5、erver发起请求Z后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返冋给浏览器,浏览器渲染页面。如果是简单的程序,一个页面就对应一个模板,非常简单。一般一个网站有自C的统一风格,所有页面都会有一些相同的元素,每个页面单独写一遍很累赘,也不好维护,所以一般模板语言都冇继承(extend),插入(include)等特性,來提高页面的复用率。Horizon做得就更彻底一些,它将页面上所有元素模块化,网页中一些常见元素,表单,表格,标签页,全部封装成Pyth
6、on类,每个组件冇自己对应的一小块html模板.当渲染整个页而的时候,Horizon先找到当前页面有多少组件,将齐个组件分别进行渲染变成一段html片段,最后拼装成一个完整的html页面,返回浏览器。简单总结Horizon的特点:1.页面元索模块化2.了面板可插拔3.AllinOne(从部署上来说,Horizon只有它自己这一个组件)DiveintoHorizonSomeConceptsHorizon这套面板的设计分成三层:Dashboard—>PanelGroupfPanelHorizon屮现冇
7、的dashboard冇4个:1.project普通用户登陆后看到的项目面板2.admin管理登陆后可见,左侧的管理员面板3.settings右上角的设置面板,里面可设置语言,时区,更改密码4.router(配置文件屮将profile_support打开可见),cisonexuslOOOv的管理面板每一个dashboard都是django中的一个app,django中的app口J以理解成对业务逻辑模块化的一种手段,里面可以包含自C独有的url设定,模板,和业务逻辑代码.每个dashboard卜"定义
8、了一系列的PanelGro叩,虚拟机管理对应到界面上就是一个PanelGroup(ManageCompute),里面有一系列的子panel(Overview,Instances,Volumes...)。Swift,heat,neutron的管理面板各自都是一个PanelGroup,底卜"有各口的了panel.SomeCodeHorizon的源码中,包含两个代码文件夹1.horizon2.openstackdashboardHorizon这个包是一些在django基础上写的通用组件,