zoukankan      html  css  js  c++  java
  • django第八天总结

    - 1.资产采集的补充
    - 2.api的校验
    
    ###内容回顾:
        - CMDB 配置管理数据库 资产采集
        - 愿景:开发自动化运维的平台
        
    - 你在开发中遇到过什么样的问题?印象比较深刻的?
        - 路径导航
        - 首页 部门列表 添加部门 [] {id:{}}
        - [ {title url}, {title url}, {title url} ]
        - 外键parent(自关联)
        - 字典放入session,进行json的序列化,字典key是数字的话,序列化后变成字符串。
        
    ###CMDB的技术点:
    - 1.sys.path
    
    - 2.开放封闭原则
        - 对源码封闭
        - 对配置开放
        
    - 3.支持三种模式 + 可扩展
        - agent
        - ssh
        - salt
        - ansible
        - ...
        - 配置 + importlib.import_module + 反射
        
    - 4.类的约束
        - 约束子类实现某些方法
        - 抽象类abc.ABCMeta + 抽象方法abc.abstractmethod
        - 继承 + 抛出异常raise NotImplementedError('')
        
    - 5.采集硬件信息的可插拔设计
        - 配置 + importlib.import_module + 反射
        
    - 6.支持win和linux的命令
    
    - 7.不通模式下采集资产的执行命令方式不同
        - agent subprocess 
        - ssh paramiko
        - salt salt.client
        
    - 8.debug调试
    
    - 9.通过requests模块将信息发送到api
        ```python
            ret = requests.post(
              url=settings.ASSET_API,
              data=json.dumps(info).encode('utf-8'),
              headers = {'content-type': 'application/json'}
          )
        ```
        - ret.text 文本
        - ret.json() 反序列化
        
    - 10.线程池
        - from concurrent.futures import ThreadPoolExecutor
        
    - 11.csrf_exempt 不进行csrf校验(FBV)
        - from django.views.decorators.csrf import csrf_exempt
        
    - 12 只能加在dispatch上(CBV)
        ```python
        from django.utils.decorators import method_decorator
        @method_decorator(csrf_exempt, name='dispatch')
        class AssetView(View):
        ```
        
    - 13 写api建议CBV
        - djangorestframework 安装
        - rest_framework 使用
        ```python
        from rest_framework.views import APIView    
        from rest_framework.response import Response
        ```
        - request.data 提交的数据
        - request._request 是原来的request
        
        
    ###唯一标识
    - 物理机:
        - sn号 物理机唯一
     
    - 物理机 + 虚拟机
        - sn号 + 调接口
        - 主机名
            - 主机名唯一
            - 在一个文件中存主机名
            - 最初没有文件,采集完成后进行汇报,api返回主机名,把主机名写入到文件中 c1.com
            - 第二次采集,读取文件中的主机名c1.com     
            - 判断主机名是否变化:
                - 变化 操作 修改主机名 + 更新硬件的信息
                - 没变化 操作 更新硬件的信息
                
    ###硬盘数据结构分析
    ```python
    data = {'0': {'slot': '0', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5NV'},
            '1': {'slot': '1', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5AH'},
            '2': {'slot': '2', 'pd_type': 'SATA', 'capacity': '476.939',
                  'model': 'S1SZNSAFA01085L     Samsung SSD 850 PRO 512GB               EXM01B6Q'},
            '3': {'slot': '3', 'pd_type': 'SATA', 'capacity': '476.939',
                  'model': 'S1AXNSAF912433K     Samsung SSD 840 PRO Series              DXM06B0Q'},
            '4': {'slot': '4', 'pd_type': 'SATA', 'capacity': '476.939',
                  'model': 'S1AXNSAF303909M     Samsung SSD 840 PRO Series              DXM05B0Q'},
            '5': {'slot': '5', 'pd_type': 'SATA', 'capacity': '476.939',
                  'model': 'S1AXNSAFB00549A     Samsung SSD 840 PRO Series              DXM06B0Q'}}
    
    db_data = [
        {'id': 1, 'slot': '0', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5NV', 'capacity': 999.396, 'pd_type': 'SAS',
         'server_id': 1},
        {'id': 2, 'slot': '1', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5AH', 'capacity': 800.396, 'pd_type': 'SAS',
         'server_id': 1},
        {'id': 3, 'slot': '2', 'model': 'S1SZNSAFA01085L     Samsung SSD 850 PRO 512GB               EXM01B6Q',
         'capacity': 476.939, 'pd_type': 'SATA', 'server_id': 1},
        {'id': 9, 'slot': '6', 'model': 'S1AXNSAFB00549A     Samsung SSD 840 PRO Series              DXM06B0Q',
         'capacity': 476.939, 'pd_type': 'SATA', 'server_id': 1}]
    
    data_set = set(data)
    print(data_set)
    
    db_data_set = {i['slot'] for i in db_data}
    print(db_data_set)
    
    add_slot_set = data_set - db_data_set
    del_slot_set = db_data_set - data_set
    update_slot_set = db_data_set & data_set
    print(add_slot_set)
    print(del_slot_set)
    print(update_slot_set)
    ```
       
    ###更新硬件信息
    - 硬盘
        - 新增硬盘
        - 删除硬盘
        - 更新硬盘
        
        
    ###api的校验
    - 1.url参数上携带 key
        - 判断key是否一致
        - 缺点:            
            - key  不动态
                
    - 2.key|时间  md5 加密
        - key=加密key&time=ctime
            
            
    - rsa加密:
        - https://www.cnblogs.com/maple-shaw/articles/7196631.html
        
       
  • 相关阅读:
    python中向函数传递列表
    python中函数与while循环结合
    python中使用函数和不使用函数程序的比较
    python中函数返回字典
    python中传递任意数量的实参 (收集参数)
    python中给函数添加返回字典中的可选键值对
    python中禁止函数修改列表
    python中结合使用位置实参和任意数量实参(收集参数)
    SAP所有用户出口列表(4.6C)(续)
    常见的abap面试题目,请大家对照学习
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11567453.html
Copyright © 2011-2022 走看看