Horizon 是壹個基於 Django 的項目,如果熟悉 Django 的同學會發現其實 Horizon openstack-dashboard 裏面的文件命名與擺放位置與 Django 幾乎是壹樣的:
.../openstack-dashboard/
- bin/
- openstack_dashboard/
- static/
- manage.py
- settings.py
從這個文件夾的結構就可以看出來,openstack-dashboard 其實就是 Django 的壹個 project,而openstack_dashboard 是壹個 app。進入 app,我們可以看到,其中壹些比較重要的文件和文件夾有:
openstack_dashboard/
- __init__.py
- views.py
- urls.py
- settings.py
- dashboards/
- enabled/
- static/
- templates/
- test/
...
是不是很熟悉?壹下子就能知道各個文件和文件夾是用來幹嘛的。url.py 負責最頂層的 url 跳轉, views.py 負責接受和處理請求然後返回結果,static 裏面放靜態資源, templates 裏面放模板, test 裏面放 unittest。只有兩個文件夾需要探索壹下,dashboards 和 enabled。如果進到 enabled 文件夾裏去看壹下的話會發現,裏面有好多添加和刪除 panel 還有 group 的例子,其實這裏就是壹個可以比較簡單的在 horizon 裏面註冊我們自己想要新建的 panel 的地方。例如我們可以把_admin_add_panel.py.example 的後綴去掉,變成_admin_add_panel.py,然後修改其中的內容:
# The name of the panel to be added to HORIZON_CONFIG. Required.
PANEL = 'plugin_panel'
# The name of the dashboard the PANEL associated with. Required.
PANEL_DASHBOARD = 'admin'
# The name of the panel group the PANEL is associated with.
PANEL_GROUP = 'admin'
# Python panel class of the PANEL to be added.
ADD_PANEL = \
'openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel'
這樣,我們就在壹個叫做 admin 的 dashboard 裏面添加了壹個叫做 plugin_panel 的 panel,並且告訴 horizon 具體的定義將會在openstack_dashboard.dashboards.admin.plugin_panel.panel.PluginPanel 中出現。
那這個時候我們就要去 dashboards 裏面打量打量,然後做些具體的事情啦。首先我們可以看到 dashboards 的結構是這樣的:
dashboards/
- __init__.py
- admin/
- project/
-router/
- settings/
由此可知,horizon 現在***有三個 dashboards,分別是 admin,project,和 router。admin 代表的是管理員可以看到的界面,project 代表的是用戶可以看到的界面,兩者在操作權限上會有壹定的區別。而 router 的功用我也不是特別清楚。簡單保險起見,我們的自定義 panel 就落戶在 admin 中。admin 文件夾中包括了很多文件和子文件夾,我就不在這裏壹壹贅述了。我們直接在其中創建壹個子文件夾叫做 plugin_panel,然後再這個子文件夾中創建四個文件,使得這個文件夾看起來是這樣的:
plugin_panel/
- __init__.py
- panel.py
- url.py
- views.py
待會兒 PluginPanel 這個類就會定義在 panel.py 中,而 url.py 和 views.py 將會分別承擔這壹層的路由跳轉和收發請求及回復的作用。