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個名詞在代碼中都可以對應上,代碼的層級結構還是很清晰的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM