1. cmdb资产审计

2.stark组件使用

  快速完成网站的一个组件,使用方式与django的admin系统类似 ,仅仅将model注册 ,就可以生成对model增删改查的页面 ,当然这里还包括了模糊搜索 ,排序 ,批量操作等等

  1)拷贝并注册stark应用到项目中(settings)

  2)在根url.py中注册stark组件的url

from django.conf.urls import url, include
from django.contrib import admin
from stark.service.stark import site urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include('api.urls')),
url(r'^stark/', site.urls),
]

  3)以业务线为例, 使用stark组件的部分功能

    list_display =  []          # 看了下源码 ,列表中主要放函数与字段 ,如果是函数的话就把从数据库拿到的queryset数据拿来循环 ,如果是字段就返回html展示

    search_list = []           # 允许用哪些字段作为搜索条件

    order_by = []            # 以某个字段排序 ,升序 ,可以加负号完成反向排序

    action_list = []             # 下拉操作列表选项 ,组件中有multi_delete方法完成批量删除 ,也可以自己定义方法(如批量更新 ,可以在request.POST中选择pk ,再通过model操作进行更新)

    def 定义函数 ,或者重写已有函数

    site注册model ,并添加配置类

##stark.py注册model文件
1.定义配置类
class BusinessUnitConfig(StarkConfig):
list_display = [StarkConfig.display_checkbox, 'id', 'name']
search_list = ['id', 'name']
order_by = ['-id'] def multi_apply(self, request):
print(request.POST)
return redirect('http://www.baidu.com') multi_apply.text = '批量更新' action_list = [StarkConfig.multi_delete,multi_apply] 2.应用配置类 ,注册到stark
site.register(models.BusinessUnit, BusinessUnitConfig)

  4)以Server服务器为例 ,使用stark组件的部分功能

    list_display = []        # 展示choice字段 ,需要定义一个函数指定标题头部

###server的model中device_status_id这个字段
device_status_choices = (
(1, '上架'), (2, '在线'), (3, '离线'), (4, '下架'),
)
device_status_id = models.IntegerField(choices=device_status_choices, default=1)

      方法1:自定义函数 ,返回html代码段 ,对于choice状态不同的id展示不同的颜色 ,在list_display中直接写上函数名即可

       方法2:使用get_choice_text( '字段' ,标题头)

class ServerConfig(StarkConfig):

    # row是orm对象 ,可以展示choices的内容
def show_status(self, header=None, row=None):
if header:
return '状态'
color = {
1: 'red',
2: 'green',
3: 'blue',
4: 'yellow'
}
# return row.get_device_status_id_display()
return mark_safe('<span style="color:{}">{}</span>'.format(color.get(row.device_status_id),
row.get_device_status_id_display())) list_display = ['id', 'hostname', show_status, 'os_platform', 'os_version','business_unit', get_choice_text('device_status_id', '状态2')]

    search_list = []      #如果以表中某一个外键为搜索条件, 例如服务器的外键业务线的名称 ?上下滑直接指定即可

    search_list = ['hostname', 'os_version', 'business_unit__name']

    list_filter = []       # 快速检索 ,以按钮的形式将条件展示 ,如果选中拿出对应的pk在filter中组合筛选 (search_list与list_filter两个会联合查询)

      list_filter组合搜索展示choice字段的按钮 ,该字段必须有choice ,text_func与value_func必须使用匿名函数 ,匿名函数的参数就是choices元祖的每一个值

    list_filter = [
Option('business_unit', is_multi=True),
# lambda中的x是(1:'上线') text_func是文本显示结果 value_func是url上对应的值 要对应
Option('device_status_id', is_multi=True, is_choice=True, text_func=lambda x: x[1], value_func=lambda x: x[0])
]

  5)bootstrap的datetimepicker日历时间选择器(为一些填写时间的字段增加体验)  (https://www.jianshu.com/p/48b2343ded54更多功能)

    首先需要自己写modelform并继承stark的modelform ,为生成时间字段增加date-picker类名称

    然后在配置类中引用自定义的modelform

    其次加载js与css文件即可

class ServerModelForm(StarkModelForm):
class Meta:
model = models.Server
fields = "__all__"
widgets = {
'latest_date': DatePickerInput(attrs={'class': 'date-picker'})
} class ServerConfig(StarkConfig):
model_form_class = ServerModelForm
...

  6)扩展功能 ,stark注册一个model ,生成增删改查资格url与对应的视图函数 ,但是扩展的功能想自定义的功能如何去完成 ?

   扩展功能1.增加显示服务器详情(硬盘内存网卡信息)   2.增加服务器审计信息展示

     在配置类定义url ,通过extra_url()函数实现

     在配置类定义视图函数

     在配置类定义每行显示的标签以及跳转url

class ServerConfig(StarkConfig):
model_form_class = ServerModelForm def server_detail(self, request, pk):
server_disks = models.Disk.objects.filter(server_id=pk).order_by('slot')
server_memorys = models.Memory.objects.filter(server_id=pk)
server_nics = models.NIC.objects.filter(server_id=pk) return render(request, 'server/server_detail.html',
{'server_disks': server_disks,
'server_memorys': server_memorys,
'server_nics': server_nics, }) def server_record(self, request, pk):
server_record = models.AssetRecord.objects.filter(server_id=pk) return render(request, 'server/server_record.html',
{'server_record': server_record,
}) def extra_url(self):
from django.conf.urls import url
urlpatterns = [
url(r'^server_detail/(\d+)/', self.server_detail),
url(r'^server_record/(\d+)/', self.server_record),
]
return urlpatterns def show_detail(self, header=None, row=None):
if header:
return '主机详情'
return mark_safe('<a href="/stark/api/server/server_detail/{}">查看</a>'.format(row.pk)) def show_record(self, header=None, row=None):
if header:
return '审计'
return mark_safe('<a href="/stark/api/server/server_record/{}">查看</a>'.format(row.pk)) # row是orm对象 ,可以展示choices的内容
def show_status(self, header=None, row=None):
if header:
return '状态'
color = {
1: 'red',
2: 'green',
3: 'blue',
4: 'yellow'
}
return mark_safe('<span style="color:{}">{}</span>'.format(color.get(row.device_status_id),
row.get_device_status_id_display())) list_display = ['id',
'hostname',
show_status,
'os_platform',
'os_version',
'business_unit',
get_choice_text('device_status_id', '状态2'), show_detail, show_record] search_list = ['hostname',
'os_version',
'business_unit__name'] list_filter = [
Option('business_unit', is_multi=True),
# lambda中的x是(1:'上线') text_func是文本显示结果 value_func是url上对应的值 要对应
Option('device_status_id', is_multi=True, is_choice=True, text_func=lambda x: x[1], value_func=lambda x: x[0])
]

3.stark功能总结

  1)注册model ,生成4个url ,以及4个视图函数

    /stark/应用名/model名/(增删改查)

  2)展示页面的功能

    展示字段 (普通字段 ,choices字段 ,外键字段)

    模糊搜索

    自定义方法

    批量操作

    组合搜索(快速筛选)

    分页

    扩展功能(url)

    保留搜索条件(分页 ,搜索条件在新增编辑时候都保留)

    新增编辑可以自定义modelform与datepicker插件

4.stark组件的部分功能源码解读

6. 实现的机制
  1). 注册APP 'stark.apps.StarkConfig',
    django的ready函数   ——》 app目录下找stark.py并执行  
    stark.py导入site对象
    site.register(model的类,配置类)
    实例化一个 Mapping的对象 (model的类,配置对象(model的类, site的对象) )
      class ModelConfigMapping(object):

        def __init__(self, model, config, prev):
          self.model = model
          self.config = config
          self.prev = prev

    site._registry是个列表里面全是mapping对象[ Mapping的对象 ]

  2). stark的路由(多重使用django的url函数进行分发!)
    url(r'stark/', site.urls)
    r'stark/',( [] ,app_name,namespace )

      url(r'api/server/',( [], ))

        api/server/list/
        api/server/add/
        api/server/(?P<pk>\d+)/change/
        api/server/(?P<pk>\d+)/del/

      根据一个model至少生成4个url地址(包括extra扩展的url)

  

 

cmdb项目-3的更多相关文章

  1. Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示

    基于之前的项目代码 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页.index页.文章页面 Python Django CMDB项目实战之-2创建APP. ...

  2. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

  3. Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面

    1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...

  4. CMDB项目要点之技术点(面试题)

    1.单例模式 日志对象用单例模式 django admin中注册类是,用到单例模式 为什么要用单例模式 同一个对象操作 维护全局变量 + 对全局变量做一些操作 # __new__ import thr ...

  5. Python之路【第二十二篇】CMDB项目

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

  6. CMDB项目开发

    CMDB介绍 CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧 ...

  7. CMDB项目实战

    01-CMDB项目介绍 02-CMDB开发背景 03-CMDB开发目的 04-CMDB资产采集方式之agent 05-CMDB资产采集方式之ssh 06-CMDB资产采集方式之saltstack 07 ...

  8. cmdb项目-1

    1.什么是cmdb 配置管理数据库 ,存储基础设备的各种信息配置等 CMDB可以存储并自动发现整个IT网络上的各种信息,比如一个IT网络上有多少台服务器.多少存储.设备的品牌.资产编号.维护人员.所属 ...

  9. CMDB项目要点总结之中控机

    1.基于paramiko对远程主机执行命令操作 秘钥形式 private_key = paramiko.RSAKey.from_private_key_file('c:/Users/用户名/.ssh/ ...

随机推荐

  1. Java描述设计模式(03):工厂方法模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.工厂方法模式 1.生活场景 系统常见的数据导出功能:数据导出PDF.WORD等常见格式. 2.工厂方法模式 是类的创建模式,又叫做虚拟构造 ...

  2. JS基础语法---作用域链

    从函数嵌套来分析: (层数一般5层内) var num=10; function f1() { var num=20; function f2() { var num=30; function f3( ...

  3. curl的使用指南

    一.查看网页源码 直接在curl命令后加上网址,就可以看到网页源码.我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码较短): $ curl www.sina.com ​   M ...

  4. python虚拟环境virtualenv下安装MySQL-python(1.2.3)

    该文章很有用建议收藏 我们在Windows下开发python应用时,可能需要安装各种第三方模块,但如果又不想污染公共的python环境,怎么办呢?最好是在各自的 python工程中创建一个virtua ...

  5. 小程序开发技术总结(wepy)

    创建wepy项目 全局安装或更新WePY命令行工具:npm install wepy-cli -g 在开发目录中生成Demo开发项目:wepy new myproject , 1.7.0之后的版本使用 ...

  6. cookies和sessions组件

    目录 cookie与session cookie介绍 session介绍 token django操作cookie 设置cookie 获取cookie 删除cookie 基于cookie实现的登录认证 ...

  7. Octave中的常用操作2

    >> ones(2:3)ans = 1 1 1 1 1 1 >> 2*ones(2:3)ans = 2 2 2 2 2 2 >> rand(3,3) 产生0~1中的 ...

  8. 压测工具ab

    1.安装abyum install httpd-tools 2.使用ab -n 2000 -c 2 http://www.cctv.com-n:总的请求数-c:并发数-k:是否开启长连接 3.结果举例 ...

  9. 怎么解决 hash 冲突

    开放定址法: 线性探测再散列 二次探测再散列 伪随机 再hash: 同时构造,多个不同的hash函数 链地址: 链表, 建立公共溢出区: 分为基本表和溢出表两个部分 开放散列(open hashing ...

  10. bzoj 5218: [Lydsy2017省队十连测]友好城市

    题意: 这题显然直接tarjan是做不了的. 这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客 于是结合莫队,我们有了个暴力. 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用 ...