openstack之horizon源碼分析之二


一、概述:

  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 加載的方式,只有在第一次訪問時才加載;

 


免責聲明!

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



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