说明
本文中所有内容仅作为学习使用,请勿用于任何商业用途。
本文为原创,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。
上一章节,我们仅仅是做到在admin管理后台看见我们定义的所有models信息。本章节开始主要是实现CMDB中资产新增、新资产上线、资产更新、资产展示等功能。
首先需要更新视图文件view.py,先不要着急去撸代码,要搞清楚新增资产的大体逻辑再去撸代码(避免返工)下图为新增资产的逻辑图示及概述:
- 其中assets-data应该是通过POST发送至服务端的资产原始数据;
- 资产数据通过json转换为json数据类型;
- 进行接收到的数据进行合理检查(安全性、合理性、完整性等);
- 判断数据是否为空,若为空则返回错误信息并退出视图;
- 判断数据是否为字典类型(这里为了方便操作,定义资产数据为字典类型),若非字典则返回错误信息并退出视图;
- 判断数据是否带有SN,若非则返回错误信息并退出视图(SN是标示一个合法资产的唯一字段,不能缺少不能为空);
下面我们根据以上逻辑,编写新增资产的视图代码:
1 from django.shortcuts import HttpResponse 2 from django.views.decorators.csrf import csrf_exempt 3 import json 4 from assets import models 5 from assets import assets_handler 6 7 8 # Create your views here. 9 @csrf_exempt #这里为了方便暂且跳过Django的csrf安全机制(后期再完善安全相关配置) 10 def report(request): 11 if request.method == "POST": 12 assets_data = request.POST.get('assets_data') 13 print(assets_data) 14 data = json.loads(assets_data) 15 # 判断data是否为空 16 if not data: 17 return HttpResponse("提交的数据为空!") 18 if not issubclass(dict, type(data)): 19 return HttpResponse("提交的数据必须是字典格式!") 20 # 判断提交的数据是否有唯一键:sn 21 sn = data.get('sn', None) 22 if sn: 23 # 判断是否为线上资产中存在的资产 24 assets_obj = models.Assets.objects.filter(sn=sn) 25 if assets_obj: 26 # 更新线上资产信息 27 update_assets = assets_handler.UpdateAsset(request, assets_obj[0], data) 28 return HttpResponse("资产已更新!") 29 else: 30 # 进入待审批区域 31 obj = assets_handler.NewAssets(request, data) 32 response = obj.add_to_new_assets_zone() 33 return HttpResponse(response) 34 else: 35 return HttpResponse("提交的数据中未包含SN,请校验数据!") 36 return HttpResponse("怎么就200了!")