首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenStack界面dashboard的二次开发(一)-增加Panel

入行到现在对openstack的界面进行过一些定制,现在进行个梳理总结。博文中如有说得不对的地方请大家谅解,同时欢迎大家指正,共同提升。

基本认识

增加Panel

一、基本认识:

openstack的dashboard是允许用户管理openstack资源和服务的一个web接口。openstack的界面相关的代码有三部分:

1、各类控件的基类,页面的通用模板等

2、界面具体样式,数据获取等

3、还有个容易被忽略的,登录认证界面

openstack的菜单总共分为三级,Dashboard、Panelgroup、Panel,分别如下图标记1/2/3所示:

有了以上认识,接下来就看看如何增加Panel

二、增加Panel

要增加一个panel首先得简单看看代码结构,进入/usr/share/openstack-dashbaord/openstack_dashboard/dashboards目录,会看到如下的结构:

admin

仔细研究可以发现这些文件夹都一一对应了管理员(admin)下的各个Panel,首先看看Dashboard的类似于配置文件的东西dashboard.py,它就是描述Dashboard的python文件。

浏览一遍该文件可以看到代码结构还是非常清晰的。其中class Admin即是描述管理员Dashboard的类,它继承了horizon(/usr/lib/python2.7/site-packages/horizon)中的Dashboard基类(描述一级菜单的基类),class Admin中有几个属性,分别为name、slug、panels、default_panel、permissions,根据基类提供的信息可以知道它们分别代表的是名称、id、该Dashboard下的panels、默认panel、权限。除此之外,还有一个class SystemPanels,可以看到它是继承horizon中的PanelGroup,根据openstack三级菜单结构可以知道它应该就是描述的二级菜单了,class SystemPanels有slug、name、panels三个属性,分别代表的是id、名称、属于它的panel。最后有一个horizon.register就是注册Dashboard了。现在看来,如果要增加一个panel到Admin这个菜单下面,无非需要做两步:

1、一个描述panel的文件夹;

2、在这个class SystemPanels下的panels属性中增加一个panel的id。

接下来就要看看代表panel的文件夹下有什么东西了。进入instances(实例)文件夹,目录结构如下:

该文件夹下的东西就是描述Panel instances(实例)的相关文件了。看这文件结构应该就是一个django app了。分别看看各个文件:

forms.py是表单,描述的是弹出框之类的,现在主要目的是增加一个panel,暂且不看。

panel.py应该就是描述这个panel基本信息的文件了,这个必须看看

可以看到以上代码结构与dashboard.py是非常类似的。这里class Instances继承了horzion中的Panel这个基类,很明显这就是描述panel的基类了。这Instances现在有三个属性,分别是name(名称)、slug(id)、permissions(权限)。注意最后一行代码,这行代码是import的前面我所说到的dashboard.py。最后一行也就是说Admin的Dashboard类用register方法注册了该panel,层级关系非常清晰。

tables.py顾名思义是描述表格之类的,看看它的代码,(这里省略了部分代码)

因为该文件是描述表格的,在这省略了部分代码,只看关键描述表格的这部分。class AdminInstancesTable继承的是DataTable这个基类,看看代码的结构可以很容易看出tables.Column就是描述表格的每一列的,其中class Meta顾名思义是描述该表格的元数据的类。它有表格的名字、动作、表动作等属性。

templates是静态模板,先只看看index.html

该模板继承了base.html,然后一个标题块block title、一个主要部分block main,table.render是传过来的值,它就是代表的表格那一块了。

tests.py为测试代码;

urls.py是决定了界面的url;

该文件每个url对应了views的一个函数或者类,index是描述主页的,其它url是相关功能的url。

views.py处理用户请求,从urls.py中反应过来,获取数据。

省略了views.py的部分代码,以后的博文中会对其它的进行描述,现在只是增加panel,只看看描述index页面的类。class AdminIndexView继承的是DataTableView这个类,这个类有table_class、template_name等几个属性,可以比较明显的看出它应该就是为那个表格类服务的了,主要功能就是获取数据,设置页面title、指定静态模板了。

那么现在就可以模仿以上这个结构自行增加一个panel了,构造一个类似的文件夹:

它们代码如下:

1、panel.py

2、tables.py

3、index.html

4、urls.py

5、views.py

除此之外,在admin中的dashboard.py加上这个panel的slug。

- dashboard.py

然后重启httpd服务,查看页面

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G0ZCLB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券