network asset

This commit is contained in:
RobbieHan
2019-04-01 10:26:16 +08:00
parent 24a3f4c107
commit 667b4bc29c
10 changed files with 960 additions and 26 deletions

View File

@@ -4,7 +4,7 @@
from django import forms
from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile
from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset
class CodeCreateForm(forms.ModelForm):
@@ -100,4 +100,31 @@ class ConnectionInfoForm(forms.ModelForm):
class DeviceFileUploadForm(forms.ModelForm):
class Meta:
model = DeviceFile
fields = '__all__'
fields = '__all__'
class NetworkAssetCreateForm(forms.ModelForm):
class Meta:
model = NetworkAsset
fields = '__all__'
error_messages = {
'name': {'required': '请填写网络资产名称'},
}
def clean(self):
cleaned_data = super(NetworkAssetCreateForm, self).clean()
ip_address = cleaned_data.get('ip_address')
if NetworkAsset.objects.filter(ip_address=ip_address).count():
raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))
class NetworkAssetUpdateForm(NetworkAssetCreateForm):
def clean(self):
cleaned_data = self.cleaned_data
ip_address = cleaned_data.get('ip_address')
if self.instance:
matching_asset = NetworkAsset.objects.exclude(pk=self.instance.pk)
if matching_asset.filter(ip_address=ip_address).exists():
raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))

View File

@@ -137,6 +137,9 @@ class NetworkAsset(models.Model):
management = models.CharField(max_length=100, blank=True, default='', verbose_name='管理地址')
show_on_top = models.BooleanField(default=False, verbose_name='首页展示')
provider = models.ForeignKey('Supplier', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='服务商')
state = models.BooleanField(default=True, verbose_name='状态')
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='购买日期')
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='到保日期')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
class Meta:
@@ -144,6 +147,19 @@ class NetworkAsset(models.Model):
verbose_name_plural = verbose_name
class NatRule(models.Model):
internet_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='互联网IP')
src_port = models.IntegerField(blank=True, default='', verbose_name='源端口')
lan_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='内网IP')
dest_port = models.IntegerField(blank=True, default='', verbose_name='目的端口')
state = models.BooleanField(default=True, verbose_name='状态')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
class Meta:
verbose_name = 'NAT规则'
verbose_name_plural = verbose_name
class DomainName(AbstractMode):
dn_type_choices = (('1', '主域名'),('2', '二级域名'))
domain = models.CharField(max_length=200, verbose_name='域名')
@@ -165,14 +181,3 @@ class DomainName(AbstractMode):
verbose_name_plural = verbose_name
class NatRule(models.Model):
internet_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='互联网IP')
src_port = models.IntegerField(blank=True, default='', verbose_name='源端口')
lan_ip = models.CharField(max_length=80, blank=True, default='', verbose_name='内网IP')
dest_port = models.IntegerField(blank=True, default='', verbose_name='目的端口')
state = models.BooleanField(default=True, verbose_name='状态')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
class Meta:
verbose_name = 'NAT规则'
verbose_name_plural = verbose_name

View File

@@ -44,4 +44,10 @@ urlpatterns = [
path('eam/supplier/update/', views_eam.SupplierUpdateView.as_view(), name='eam-supplier-update'),
path('eam/supplier/list/', views_eam.SupplierListView.as_view(), name='eam-supplier-list'),
path('eam/supplier/delete/', views_eam.SupplierDeleteView.as_view(), name='eam-supplier-delete'),
path('eam/network_asset/', views_eam.NetworkAssetView.as_view(), name='eam-network_asset'),
path('eam/network_asset/create/', views_eam.NetworkAssetCreateView.as_view(), name='eam-network_asset-create'),
path('eam/network_asset/update/', views_eam.NetworkAssetUpdateView.as_view(), name='eam-network_asset-update'),
path('eam/network_asset/list/', views_eam.NetworkAssetListView.as_view(), name='eam-network_asset-list'),
path('eam/network_asset/delete/', views_eam.NetworkAssetDeleteView.as_view(), name='eam-network_asset-delete'),
]

View File

@@ -11,8 +11,9 @@ 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
Supplier, NetworkAsset)
from .forms import (DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm,
DeviceFileUploadForm, NetworkAssetCreateForm, NetworkAssetUpdateForm)
from utils.db_utils import MongodbDriver
from utils.sandbox_utils import LoginExecution
@@ -108,6 +109,8 @@ class DeviceListView(SandboxListView):
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
@@ -115,7 +118,6 @@ class DeviceCreateView(SandboxCreateView):
def get_context_data(self, **kwargs):
public_data = get_device_public()
kwargs.update(public_data)
print(public_data)
return super().get_context_data(**kwargs)
@@ -257,17 +259,58 @@ class SupplierUpdateView(SandboxUpdateView):
class SupplierListView(SandboxListView):
model = Supplier
fields = '__all__'
fields = ['id', 'firm', 'contact_details', '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']
if 'firm' in data and data['firm']:
filters['firm__icontains'] = data['firm']
if 'contact_details' in data and data['contact_details']:
filters['contact_deatils__icontains'] = data['contact_details']
return filters
class SupplierDeleteView(SandboxDeleteView):
model = Supplier
model = Supplier
class NetworkAssetView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
template_name = 'cmdb/network_asset.html'
class NetworkAssetCreateView(SandboxCreateView):
model = NetworkAsset
form_class = NetworkAssetCreateForm
def get_context_data(self, **kwargs):
kwargs['all_provider'] = Supplier.objects.all()
return super().get_context_data(**kwargs)
class NetworkAssetUpdateView(SandboxUpdateView):
model = NetworkAsset
form_class = NetworkAssetUpdateForm
def get_context_data(self, **kwargs):
kwargs['all_provider'] = Supplier.objects.all()
return super().get_context_data(**kwargs)
class NetworkAssetListView(SandboxListView):
model = NetworkAsset
fields = ['id', 'name', 'ip_address', 'management', 'provider__firm', 'buyDate', 'warrantyDate', 'state']
def get_filters(self):
data = self.request.GET
filters = {}
if 'name' in data and data['name']:
filters['name__icontains'] = data['name']
if 'ip_address' in data and data['ip_address']:
filters['ip_address__icontains'] = data['ip_address']
return filters
class NetworkAssetDeleteView(SandboxDeleteView):
model = NetworkAsset