cmdb项目-3

2023-05-16

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])
    ]  
View Code

 

 

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)

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

转载于:https://www.cnblogs.com/quguanwen/p/11526303.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmdb项目-3 的相关文章

随机推荐

  • 2019清北学堂学习笔记

    暴力求解法 迭代加深搜 适用于搜索树深度不确定的时候 xff0c 可以使用迭代加深搜 步骤 xff1a 1 枚举maxd表示最深枚举深度 xff1b 2 假设当前深度为g n xff0c 乐观估计至少要h n 层才能到达叶子节点 xff0c
  • 日记-致我那易逝的时光

    9月 28日 第一次在机房里写日记 xff0c 踩着这几百块钱的电脑桌 xff1b 看着这几十块钱的显示屏 xff1b 敲着这几块钱的键盘 xff1b 烧着这几毛钱的 Central Processing Unit xff1b 捏着这几分钱
  • linux node安装教程

    官网下载 http nodejs cn 解压 tar xvf node v10 14 1 linux x64 tar gz mv node v10 14 1 linux x64 node 环境变量配置 vim etc profile exp
  • 洛谷P1230智力大冲浪 题解

    题目描述 小伟报名参加中央电视台的智力大冲浪节目 本次挑战赛吸引了众多参赛者 xff0c 主持人为了表彰大家的勇气 xff0c 先奖励每个参赛者m元 先不要太高兴 xff01 因为这些钱还不一定都是你的 xff1f xff01 接下来主持人
  • 根据hash值找到bt种子的磁力下载链

    根据hash值找到bt种子的磁力下载链 画皮2 hash E5757D533B3690774519E6A80021E43C03A58C0B 磁力 下载链接 如下 xff1a magnet xt 61 urn btih E5757D533B3
  • 操作系统中的P-V操作(转)

    信号量是最早出现的用来解决进程同步与互斥问题的机制 也可实现进程通信 xff0c 包括一个称为信号量的变量及对它进行的两个原语操作 信号量为一个整数 xff0c 我们设这个信号量为 xff1a sem 很显然 xff0c 我们规定在sem大
  • Linux使用storcli工具查看服务器硬盘和raid组信息

    1 简介 MegaCli 是LSI公司官方提供的SCSI卡管理工具 xff0c 由于LSI被收购变成了现在的Broadcom xff0c 所以现在想下载MegaCli xff0c 需要去Broadcom官网查找Legacy产品支持 xff0
  • 四元数运动学笔记(5)IMU驱动的运动误差方程

    1 扩展卡尔曼滤波EKF 1 1线性化卡尔曼滤波 1 2偏差微分方程的推导 1 3线性化卡尔曼滤波的流程 1 4 离散EKF 2 误差状态的运动方程 2 1连续时间的IMU系统动态方程 2 1 1相关变量 2 1 2真实状态运动方程 tru
  • 静态分析:IDA逆向代码段说明 text、idata、rdata、data

    通常IDA对一个PE文件逆向出来的代码中 xff0c 存在四个最基本的段text idata rdata data xff0c 四个段为PE文件的结构中对应的段 一 text段 xff1a 该段位程序代码段 xff0c 在该段一开始就可以看
  • web前端——html基础笔记 NO.14{颜色值,长度值}

    颜色值 在网页中的颜色设置是非常重要 xff0c 有字体颜色 xff08 color xff09 背景颜色 xff08 background color xff09 边框颜色 xff08 border xff09 等 xff0c 设置颜色的
  • 无人机行业的机遇与挑战

    无人机行业是现如今正在蓬勃发展的一个行业 xff0c 现在已经成为了一个比较成熟的行业 xff0c 且无人机在如今的作用也是无比重要的 xff0c 它已经成功的应用在包括军用民用等各个方面了 这一次我们就来探索一下 xff0c 无人机在未来
  • linux bash bad substitution,shell 中bad substitution错误

    今天在学习linux写shell脚本的时候 xff0c 碰到了一个bad substitution错误 脚本的内容是输入一个文件名 xff0c 创建出三个文件名 43 日期 今天 xff0c 昨天 xff0c 前天 的文件 有错误的代码如下
  • OpenStack精华问答 | OpenStack都有哪些基础服务?

    戳蓝字 CSDN云计算 关注我们哦 xff01 关于 OpenStack 的探讨几乎从未间断 xff0c 从 2010年10月份一个版本正式发布至今 xff0c OpenStack 在 8年发展历程中 xff0c 成为了最有争议的那一个 今
  • VirtualBox解决主机和虚拟机之间ping不通

    VirtualBox在开启虚拟机的时候开启两个网卡 xff0c 分别为Host only模式和桥接模式 xff0c 注意主机的防火墙一定要关闭 xff0c 否则虚拟机ping不通 此时 xff1a 1 虚拟机能ping通主机 xff0c p
  • root切换用户时遭遇"cannot change directory to /home/xxx: Permission denied"

    系统 xff1a centos5 x 以前我安装mysql时 新建用户的命令是这样的 shell gt groupadd mysql shell gt useradd g mysql mysql shell gt cd usr local
  • ROS知识(12)----cv_bridge依赖opencv版本的问题

    cv bridge默认依赖的oencv版本是2 4 8 xff0c 如果安装了新的opencv版本 xff0c 比如2 4 11 xff0c 那么在编译cv bridge时候会提示无法找到opencv 2 4 8 so的库 为解决这个问题
  • C# 环境

    C 环境 在这一章中 xff0c 我们将讨论创建 C 编程所需的工具 我们已经提到 C 是 Net 框架的一部分 xff0c 且用于编写 Net 应用程序 因此 xff0c 在讨论运行 C 程序的可用工具之前 xff0c 让我们先了解一下
  • cmdb项目-2

    1 命令插件异常处理 43 日志采集 1 为了更清楚发送客户端收集信息的状态 xff0c 优化返回api的数据 xff0c 变为字典存储 状态 错误信息 数据 xff0c 因为每个插件的每种系统下都要这个返回值我们将他单独做成类 lib B
  • cmdb项目-1

    1 什么是cmdb 配置管理数据库 存储基础设备的各种信息配置等 CMDB可以存储并自动发现整个IT网络上的各种信息 xff0c 比如一个IT网络上有多少台服务器 多少存储 设备的品牌 资产编号 维护人员 所属部门 服务器上运营什么操作系统
  • cmdb项目-3

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