From 6765fa8b66ba408117239029022ba9dc57722030 Mon Sep 17 00:00:00 2001 From: RobbieHan Date: Thu, 31 Jan 2019 00:57:11 +0800 Subject: [PATCH] deviceinfo --- apps/cmdb/forms.py | 33 ++- apps/cmdb/models.py | 12 +- apps/cmdb/urls.py | 6 + apps/cmdb/views_eam.py | 84 ++++++- requirements/pro.txt | 2 +- templates/cmdb/deviceinfo.html | 329 ++++++++++++++++++++++++++++ templates/cmdb/deviceinfo_form.html | 221 +++++++++++++++++++ 7 files changed, 677 insertions(+), 10 deletions(-) create mode 100644 templates/cmdb/deviceinfo.html create mode 100644 templates/cmdb/deviceinfo_form.html diff --git a/apps/cmdb/forms.py b/apps/cmdb/forms.py index 4f44c9b..6a2cd55 100644 --- a/apps/cmdb/forms.py +++ b/apps/cmdb/forms.py @@ -4,7 +4,7 @@ from django import forms -from .models import Code +from .models import Code, DeviceInfo class CodeCreateForm(forms.ModelForm): @@ -43,4 +43,33 @@ class CodeUpdateForm(CodeCreateForm): raise forms.ValidationError(msg) if matching_code.filter(value=value).exists(): msg = 'value:{} 已经存在'.format(value) - raise forms.ValidationError(msg) \ No newline at end of file + raise forms.ValidationError(msg) + + +class DeviceCreateForm(forms.ModelForm): + class Meta: + model = DeviceInfo + exclude = ['dev_connection'] + error_messages = { + 'hostname': {'required': '请填写设备地址'}, + 'buyDate': {'required': '请填写购买日期'}, + 'warrantyDate': {'required': '请填写到保日期'} + } + + def clean(self): + cleaned_data = super(DeviceCreateForm, self).clean() + hostname = cleaned_data.get('hostname') + + if DeviceInfo.objects.filter(hostname=hostname).count(): + raise forms.ValidationError('设备地址:{}已存在'.format(hostname)) + + +class DeviceUpdateForm(DeviceCreateForm): + def clean(self): + cleaned_data = self.cleaned_data + hostname = cleaned_data.get('hostname') + + if self.instance: + matching_device = DeviceInfo.objects.exclude(pk=self.instance.pk) + if matching_device.filter(hostname=hostname).exists(): + raise forms.ValidationError('设备地址:{}已存在'.format(hostname)) \ No newline at end of file diff --git a/apps/cmdb/models.py b/apps/cmdb/models.py index 1151a50..41840d2 100644 --- a/apps/cmdb/models.py +++ b/apps/cmdb/models.py @@ -53,11 +53,11 @@ class ConnectionAbstract(models.Model): class DeviceAbstract(models.Model): - sys_hostname = models.CharField(max_length=50, blank=True, default='', verbose_name='主机名') - mac_address = models.CharField(max_length=50, blank=True, default='', verbose_name='MAC地址') - sn_number = models.CharField(max_length=50, blank=True, default='', verbose_name='SN号码') - os_type = models.CharField(max_length=50, blank=True, default='', verbose_name='系统类型') - device_type = models.CharField(max_length=50, blank=True, default='', verbose_name='设备类型') + sys_hostname = models.CharField(max_length=150, blank=True, default='', verbose_name='主机名') + mac_address = models.CharField(max_length=150, blank=True, default='', verbose_name='MAC地址') + sn_number = models.CharField(max_length=150, blank=True, default='', verbose_name='SN号码') + os_type = models.CharField(max_length=150, blank=True, default='', verbose_name='系统类型') + device_type = models.CharField(max_length=150, blank=True, default='', verbose_name='设备类型') class Meta: abstract = True @@ -100,7 +100,7 @@ class DeviceInfo(AbstractMode, DeviceAbstract, TimeAbstract): warrantyDate = models.DateField(default=datetime.now, verbose_name="到保日期") desc = models.TextField(blank=True, default='', verbose_name='备注信息') changed_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL) - history = HistoricalRecords(excluded_fields=['add_time', 'modify_time']) + history = HistoricalRecords(excluded_fields=['add_time', 'modify_time', 'parent']) class Meta: verbose_name = '设备信息' diff --git a/apps/cmdb/urls.py b/apps/cmdb/urls.py index f58f0a7..bc68639 100644 --- a/apps/cmdb/urls.py +++ b/apps/cmdb/urls.py @@ -27,4 +27,10 @@ urlpatterns = [ path('eam/cabinet/list/', views_eam.CabinetListView.as_view(), name='eam-cabinet-list'), path('eam/cabinet/delete/', views_eam.CabinetDeleteView.as_view(), name='eam-cabinet-delete'), + path('eam/device/', views_eam.DeviceView.as_view(), name='eam-device'), + path('eam/device/create/', views_eam.DeviceCreateView.as_view(), name='eam-device-create'), + path('eam/device/update/', views_eam.DeviceUpdateView.as_view(), name='eam-device-update'), + path('eam/device/list/', views_eam.DeviceListView.as_view(), name='eam-device-list'), + path('eam/device/delete/', views_eam.DeviceDeleteView.as_view(), name='eam-device-delete'), + ] diff --git a/apps/cmdb/views_eam.py b/apps/cmdb/views_eam.py index 68d9018..c522681 100644 --- a/apps/cmdb/views_eam.py +++ b/apps/cmdb/views_eam.py @@ -1,9 +1,14 @@ from django.views.generic import TemplateView +from django.contrib.auth import get_user_model +from django.shortcuts import get_object_or_404 from system.mixin import LoginRequiredMixin from custom import (BreadcrumbMixin, SandboxDeleteView, SandboxListView, SandboxUpdateView, SandboxCreateView) -from .models import Cabinet +from .models import Cabinet, DeviceInfo, Code +from .forms import DeviceCreateForm, DeviceUpdateForm + +User = get_user_model() class CabinetView(LoginRequiredMixin, BreadcrumbMixin, TemplateView): @@ -36,3 +41,80 @@ class CabinetListView(SandboxListView): 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', 'sn_number', 'os_type', 'device_type', 'hostname', 'mac_address', 'leader'] + + 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'] + return filters + + def get_datatables_paginator(self, request): + context_data = super().get_datatables_paginator(request) + data = context_data['data'] + for device in data: + user_id = device['leader'] + device['leader'] = get_object_or_404( + User, pk=int(user_id)).name if user_id 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 diff --git a/requirements/pro.txt b/requirements/pro.txt index a9b6246..b04e5cd 100644 --- a/requirements/pro.txt +++ b/requirements/pro.txt @@ -1,4 +1,4 @@ -django==2.1.2 +django==2.1.5 pillow==5.3.0 mysqlclient==1.3.13 ipython==7.1.1 diff --git a/templates/cmdb/deviceinfo.html b/templates/cmdb/deviceinfo.html new file mode 100644 index 0000000..b3a7433 --- /dev/null +++ b/templates/cmdb/deviceinfo.html @@ -0,0 +1,329 @@ +{% extends "base-left.html" %} +{% load staticfiles %} + +{% block css %} + + + +{% endblock %} + +{% block content %} + + +
+
+
+
+
+ +
+
 
+
+ + +
+
 
+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + + +
ID主机名SN编号系统类型设备类型设备地址MAC地址责任人操作
+

+
+
+
+ +
+ + + +{% endblock %} + + +{% block javascripts %} + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/cmdb/deviceinfo_form.html b/templates/cmdb/deviceinfo_form.html new file mode 100644 index 0000000..91e3cf9 --- /dev/null +++ b/templates/cmdb/deviceinfo_form.html @@ -0,0 +1,221 @@ +{% extends 'base-layer.html' %} +{% load staticfiles %} + +{% block css %} + + + +{% endblock %} + +{% block main %} +
+
+ + + {% csrf_token %} +
+
+ + +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+ + +
+
+ +{% endblock %} + +{% block javascripts %} + + + + +{% endblock %} \ No newline at end of file