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