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
    
   
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11567453.html