This commit is contained in:
RobbieHan
2019-04-02 18:34:39 +08:00
parent 667b4bc29c
commit 0e7bb2678f
9 changed files with 1127 additions and 839 deletions

View File

@@ -4,7 +4,7 @@
from django import forms
from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset
from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset, NatRule
class CodeCreateForm(forms.ModelForm):
@@ -127,4 +127,16 @@ class NetworkAssetUpdateForm(NetworkAssetCreateForm):
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))
raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))
class NatRuleForm(forms.ModelForm):
class Meta:
model = NatRule
fields = '__all__'
error_messages = {
'internet_ip': {'required': '请填写公网IP'},
'src_port': {'required': '请填写公网端口'},
'lan_ip': {'required': '请填写内网地址'},
'dest_port': {'required': '请填写内网端口'}
}

View File

@@ -148,12 +148,13 @@ class NetworkAsset(models.Model):
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='目的端口')
internet_ip = models.CharField(max_length=80, verbose_name='互联网IP')
src_port = models.IntegerField(verbose_name='源端口')
lan_ip = models.CharField(max_length=80, verbose_name='内网IP')
dest_port = models.IntegerField(verbose_name='目的端口')
state = models.BooleanField(default=True, verbose_name='状态')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
dev_cabinet = models.ForeignKey('Cabinet', blank=True, default='', on_delete=models.SET_DEFAULT, verbose_name='机柜信息')
desc = models.CharField(max_length=100, verbose_name='规则说明')
class Meta:
verbose_name = 'NAT规则'
@@ -164,14 +165,12 @@ class DomainName(AbstractMode):
dn_type_choices = (('1', '主域名'),('2', '二级域名'))
domain = models.CharField(max_length=200, verbose_name='域名')
dn_type = models.CharField(max_length=20, choices=dn_type_choices, default='1')
addr_resolution = models.ForeignKey('NatRule', blank=True, null=True,
on_delete=models.SET_NULL, verbose_name='解析地址')
resolution_server = models.ForeignKey('Supplier', related_name='res_server',
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
domain_provider = models.ForeignKey('Supplier', related_name='do_provider',
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='域名服务')
state = models.BooleanField(default=True, verbose_name='状态')
ssl = models.FileField(upload_to="ssl_file/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
ssl_cert = models.FileField(upload_to="ssl_cert/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
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='备注信息')
@@ -181,3 +180,5 @@ class DomainName(AbstractMode):
verbose_name_plural = verbose_name

View File

@@ -50,4 +50,10 @@ urlpatterns = [
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'),
path('eam/natrule/', views_eam.NatRuleView.as_view(), name='eam-natrule'),
path('eam/natrule/create/', views_eam.NatRuleCreateView.as_view(), name='eam-natrule-create'),
path('eam/natrule/update/', views_eam.NatRuleUpdateView.as_view(), name='eam-natrule-update'),
path('eam/natrule/list/', views_eam.NatRuleListView.as_view(), name='eam-natrule-list'),
path('eam/natrule/delete/', views_eam.NatRuleDeleteView.as_view(), name='eam-natrule-delete'),
]

View File

@@ -11,9 +11,10 @@ from system.mixin import LoginRequiredMixin
from custom import (BreadcrumbMixin, SandboxDeleteView,
SandboxListView, SandboxUpdateView, SandboxCreateView)
from .models import (Cabinet, DeviceInfo, Code, ConnectionInfo, DeviceFile,
Supplier, NetworkAsset)
Supplier, NetworkAsset, NatRule, DomainName)
from .forms import (DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm,
DeviceFileUploadForm, NetworkAssetCreateForm, NetworkAssetUpdateForm)
DeviceFileUploadForm, NetworkAssetCreateForm,
NetworkAssetUpdateForm,NatRuleForm)
from utils.db_utils import MongodbDriver
from utils.sandbox_utils import LoginExecution
@@ -314,3 +315,97 @@ class NetworkAssetListView(SandboxListView):
class NetworkAssetDeleteView(SandboxDeleteView):
model = NetworkAsset
class NatRuleView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
template_name = 'cmdb/natrule.html'
def get_context_data(self, **kwargs):
kwargs['all_cabinet'] = Cabinet.objects.all()
return super().get_context_data(**kwargs)
class NatRuleCreateView(SandboxCreateView):
model = NatRule
form_class = NatRuleForm
def get_context_data(self, **kwargs):
kwargs['all_cabinet'] = Cabinet.objects.all()
return super().get_context_data(**kwargs)
class NatRuleUpdateView(SandboxUpdateView):
model = NatRule
form_class = NatRuleForm
def get_context_data(self, **kwargs):
kwargs['all_cabinet'] = Cabinet.objects.all()
return super().get_context_data(**kwargs)
class NatRuleListView(SandboxListView):
model = NatRule
fields = ['id', 'internet_ip', 'src_port', 'lan_ip', 'dest_port', 'state', 'dev_cabinet__number', 'desc']
def get_filters(self):
data = self.request.GET
filters = {}
if 'internet_ip' in data and data['internet_ip']:
filters['internet_ip__icontains'] = data['internet_ip']
if 'src_port' in data and data['src_port']:
filters['src_port'] = data['src_port']
if 'lan_ip' in data and data['lan_ip']:
filters['lan_ip__icontains'] = data['lan_ip']
if 'dest_port' in data and data['dest_port']:
filters['dest_port'] = data['dest_port']
if 'dev_cabinet' in data and data['dev_cabinet']:
filters['dev_cabinet'] = data['dev_cabinet']
if 'desc' in data and data['desc']:
filters['desc__icontains'] = data['desc']
return filters
class NatRuleDeleteView(SandboxDeleteView):
model = NatRule
# class DomainNameView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
# template_name = 'cmdb/domainname.html'
#
#
# class DomainNameCreateView(SandboxCreateView):
# model = DomainName
# form_class = NetworkAssetCreateForm
#
# def get_context_data(self, **kwargs):
# kwargs['all_supplier'] = Supplier.objects.all()
# return super().get_context_data(**kwargs)
#
#
# class DomainNameUpdateView(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 DomainNameListView(SandboxListView):
# model = NetworkAsset
# fields = ['id', 'domain', 'resolution_server', 'domain_provider', 'state', 'buyDate', 'warrantyDate', 'desc']
#
# def get_filters(self):
# data = self.request.GET
# filters = {'dn_type': '1'}
# if 'domain' in data and data['domain']:
# filters['domain__icontains'] = data['domain']
# if 'resolution_server' in data and data['resolution_server']:
# filters['resolution_server'] = data['resolution_server']
# if 'domain_provider' in data and data['domain_provider']:
# filters['domain_provider'] = data['domain_provider']
#
# return filters
#
#
# class DomainNameDeleteView(SandboxDeleteView):
# model = DomainName