import re from django.views.generic import TemplateView, View from django.contrib.auth import get_user_model from django.shortcuts import get_object_or_404 from django.http import JsonResponse from django.shortcuts import render from django.forms.models import model_to_dict from system.mixin import LoginRequiredMixin from custom import (BreadcrumbMixin, SandboxDeleteView, SandboxListView, SandboxUpdateView, SandboxCreateView) from .models import (Cabinet, DeviceInfo, Code, ConnectionInfo, DeviceFile, Supplier) from .forms import DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm, DeviceFileUploadForm from utils.db_utils import MongodbDriver from utils.sandbox_utils import LoginExecution User = get_user_model() class CabinetView(LoginRequiredMixin, BreadcrumbMixin, TemplateView): template_name = 'cmdb/cabinet.html' class CabinetCreateView(SandboxCreateView): model = Cabinet fields = '__all__' class CabinetUpdateView(SandboxUpdateView): model = Cabinet fields = '__all__' class CabinetListView(SandboxListView): model = Cabinet fields = ['id', 'number', 'position', 'desc'] def get_filters(self): data = self.request.GET filters = {} if 'number' in data and data['number']: filters['number__icontains'] = data['number'] if 'position' in data and data['position']: filters['position__icontains'] = data['position'] return filters class CabinetDeleteView(SandboxDeleteView): model = Cabinet def get_device_public(): all_code = Code.objects.all() all_cabinet = Cabinet.objects.all() all_user = User.objects.all() all_device = DeviceInfo.objects.all() ret = { 'all_code': all_code, 'all_cabinet': all_cabinet, 'all_user': all_user, 'all_device': all_device, } return ret class DeviceView(LoginRequiredMixin, BreadcrumbMixin, TemplateView): template_name = 'cmdb/deviceinfo.html' def get_context_data(self, **kwargs): device_public = get_device_public() kwargs.update(device_public) return super().get_context_data(**kwargs) class DeviceListView(SandboxListView): model = DeviceInfo fields = ['id', 'sys_hostname', 'hostname', 'service_type', 'operation_type', 'config', 'dev_cabinet', 'network_type'] def get_filters(self): data = self.request.GET filters = {} if 'sys_hostname' in data and data['sys_hostname']: filters['sys_hostname__icontains'] = data['sys_hostname'] if 'hostname' in data and data['hostname']: filters['hostname__icontains'] = data['hostname'] if 'network_type' in data and data['network_type']: filters['network_type'] = data['network_type'] if 'service_type' in data and data['service_type']: filters['service_type'] = data['service_type'] if 'operation_type' in data and data['operation_type']: filters['operation_type'] = data['operation_type'] if 'dev_cabinet' in data and data['dev_cabinet']: filters['dev_cabinet'] = data['dev_cabinet'] return filters def get_datatables_paginator(self, request): context_data = super().get_datatables_paginator(request) data = context_data['data'] for device in data: service_type = device['service_type'] operation_type = device['operation_type'] dev_cabinet = device['dev_cabinet'] network_type = device['network_type'] device['operation_type'] = get_object_or_404(Code, pk=int(operation_type)).value if operation_type else '' device['network_type'] = get_object_or_404(Code, pk=int(network_type)).value if network_type else '' device['service_type'] = get_object_or_404(Code, pk=int(service_type)).value if service_type else '' device['dev_cabinet'] = get_object_or_404(Cabinet, pk=int(dev_cabinet)).number if dev_cabinet else '' return context_data class DeviceCreateView(SandboxCreateView): model = DeviceInfo form_class = DeviceCreateForm def get_context_data(self, **kwargs): public_data = get_device_public() kwargs.update(public_data) print(public_data) return super().get_context_data(**kwargs) class DeviceUpdateView(SandboxUpdateView): model = DeviceInfo form_class = DeviceUpdateForm def get_context_data(self, **kwargs): public_data = get_device_public() kwargs.update(public_data) return super().get_context_data(**kwargs) class DeviceDeleteView(SandboxDeleteView): model = DeviceInfo class Device2ConnectionView(LoginRequiredMixin, View): def get(self, request): ret = dict() if 'id' in request.GET and request.GET['id']: device = get_object_or_404(DeviceInfo, pk=int(request.GET['id'])) ret['device'] = device dev_connection = device.dev_connection if dev_connection: connection_info = get_object_or_404( ConnectionInfo, pk=int(dev_connection) ) ret['connection_info'] = connection_info return render(request, 'cmdb/deviceinfo2connection.html', ret) def post(self, request): res = dict(result=False) con_info = ConnectionInfo() if 'id' in request.POST and request.POST['id']: con_info = get_object_or_404(ConnectionInfo, pk=request.POST['id']) form = ConnectionInfoForm(request.POST, instance=con_info) if form.is_valid(): instance = form.save() con_id = getattr(instance, 'id') device = get_object_or_404(DeviceInfo, hostname=request.POST['hostname']) device.dev_connection = con_id device.save() res['result'] = True else: pattern = '
  • .*?