From fcd39370ed14f3348602bc4f0897a1c4e562f3eb Mon Sep 17 00:00:00 2001 From: wangyong <864072399@qq.com> Date: Sun, 14 Aug 2016 22:10:10 +0800 Subject: [PATCH] add asset some cbv --- apps/assets/forms.py | 35 ++ apps/assets/migrations/0001_initial.py | 111 +++++ apps/assets/models.py | 84 +++- apps/assets/templates/assets/asset_add.html | 197 +++++++++ apps/assets/templates/assets/asset_list.html | 430 +++++++++++++++++++ apps/assets/templates/assets/example.html | 0 apps/assets/urls.py | 11 + apps/assets/views.py | 55 ++- apps/jumpserver/urls.py | 1 + 9 files changed, 921 insertions(+), 3 deletions(-) create mode 100644 apps/assets/forms.py create mode 100644 apps/assets/migrations/0001_initial.py create mode 100644 apps/assets/templates/assets/asset_add.html create mode 100644 apps/assets/templates/assets/asset_list.html delete mode 100644 apps/assets/templates/assets/example.html diff --git a/apps/assets/forms.py b/apps/assets/forms.py new file mode 100644 index 000000000..0c6ac66e4 --- /dev/null +++ b/apps/assets/forms.py @@ -0,0 +1,35 @@ +# coding:utf-8 +from django import forms + +from .models import IDC, Asset, AssetGroup + + +class AssetForm(forms.ModelForm): + + class Meta: + model = Asset + + fields = [ + "ip", "other_ip", "hostname", "port", "group", "username", "password", "idc", "mac_addr", + "remote_card_ip", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos", + "number", "status", "type", "env", "sn", "is_active", "comment" + ] + + +class AssetGroupForm(forms.ModelForm): + class Meta: + model = AssetGroup + fields = [ + "name", "comment" + ] + + +class IdcForm(forms.ModelForm): + class Meta: + model = IDC + fields = ['name', "bandwidth", "operator", 'contact', 'phone', 'address', 'network', 'comment'] + widgets = { + 'name': forms.TextInput(attrs={'placeholder': 'Name'}), + 'network': forms.Textarea( + attrs={'placeholder': '192.168.1.0/24\n192.168.2.0/24'}) + } diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py new file mode 100644 index 000000000..c6784a4ac --- /dev/null +++ b/apps/assets/migrations/0001_initial.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-08-14 08:12 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Asset', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ip', models.CharField(blank=True, max_length=32, verbose_name='\u4e3b\u673aIP')), + ('other_ip', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u5176\u4ed6IP')), + ('remote_card_ip', models.CharField(blank=True, max_length=16, null=True, verbose_name='\u8fdc\u63a7\u5361IP')), + ('hostname', models.CharField(max_length=128, unique=True, verbose_name='\u4e3b\u673a\u540d')), + ('port', models.IntegerField(blank=True, null=True, verbose_name='\u7aef\u53e3\u53f7')), + ('username', models.CharField(blank=True, max_length=16, null=True, verbose_name='\u7ba1\u7406\u7528\u6237\u540d')), + ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='\u5bc6\u7801')), + ('mac_addr', models.CharField(blank=True, max_length=20, null=True, verbose_name='MAC\u5730\u5740')), + ('brand', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u786c\u4ef6\u5382\u5546\u578b\u53f7')), + ('cpu', models.CharField(blank=True, max_length=64, null=True, verbose_name='CPU')), + ('memory', models.CharField(blank=True, max_length=128, null=True, verbose_name='\u5185\u5b58')), + ('disk', models.CharField(blank=True, max_length=1024, null=True, verbose_name='\u786c\u76d8')), + ('os', models.CharField(blank=True, max_length=128, null=True, verbose_name='\u7cfb\u7edf\u4fe1\u606f')), + ('cabinet_no', models.CharField(blank=True, max_length=32, null=True, verbose_name='\u673a\u67dc\u53f7')), + ('cabinet_pos', models.IntegerField(blank=True, null=True, verbose_name='\u673a\u5668\u4f4d\u7f6e')), + ('number', models.CharField(blank=True, max_length=32, null=True, verbose_name='\u8d44\u4ea7\u7f16\u53f7')), + ('sn', models.CharField(blank=True, max_length=128, null=True, verbose_name='SN\u7f16\u53f7')), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='\u521b\u5efa\u8005')), + ('is_active', models.BooleanField(default=True, verbose_name='\u662f\u5426\u6fc0\u6d3b')), + ('date_added', models.DateTimeField(auto_now=True, null=True)), + ('comment', models.CharField(blank=True, max_length=128, null=True, verbose_name='\u5907\u6ce8')), + ], + options={ + 'db_table': 'asset', + }, + ), + migrations.CreateModel( + name='AssetExtend', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + migrations.CreateModel( + name='AssetGroup', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=64, unique=True)), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='\u521b\u5efa\u8005')), + ('comment', models.CharField(blank=True, max_length=128, null=True)), + ], + options={ + 'db_table': 'assetgroup', + }, + ), + migrations.CreateModel( + name='IDC', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=32, verbose_name='\u673a\u623f\u540d\u79f0')), + ('bandwidth', models.CharField(blank=True, default='', max_length=32, null=True, verbose_name='\u673a\u623f\u5e26\u5bbd')), + ('contact', models.CharField(blank=True, default='', max_length=16, null=True, verbose_name='\u8054\u7cfb\u4eba')), + ('phone', models.CharField(blank=True, default='', max_length=32, null=True, verbose_name='\u8054\u7cfb\u7535\u8bdd')), + ('address', models.CharField(blank=True, default='', max_length=128, null=True, verbose_name='\u673a\u623f\u5730\u5740')), + ('network', models.TextField(blank=True, default='', null=True, verbose_name='IP\u5730\u5740\u6bb5')), + ('date_added', models.DateField(auto_now=True, null=True)), + ('operator', models.CharField(blank=True, default='', max_length=32, null=True, verbose_name='\u8fd0\u8425\u5546')), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='\u521b\u5efa\u8005')), + ('comment', models.CharField(blank=True, default='', max_length=128, null=True, verbose_name='\u5907\u6ce8')), + ], + options={ + 'db_table': 'idc', + 'verbose_name': 'IDC\u673a\u623f', + 'verbose_name_plural': 'IDC\u673a\u623f', + }, + ), + migrations.AddField( + model_name='asset', + name='env', + field=models.ManyToManyField(blank=True, related_name='asset_env_extend', to='assets.AssetExtend', verbose_name='\u6240\u5c5e\u4e3b\u673a\u7ec4\u73af\u5883'), + ), + migrations.AddField( + model_name='asset', + name='group', + field=models.ManyToManyField(blank=True, to='assets.AssetGroup', verbose_name='\u6240\u5c5e\u4e3b\u673a\u7ec4'), + ), + migrations.AddField( + model_name='asset', + name='idc', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.IDC', verbose_name='\u673a\u623f'), + ), + migrations.AddField( + model_name='asset', + name='status', + field=models.ManyToManyField(blank=True, related_name='asset_status_extend', to='assets.AssetExtend', verbose_name='\u673a\u5668\u72b6\u6001'), + ), + migrations.AddField( + model_name='asset', + name='type', + field=models.ManyToManyField(blank=True, related_name='asset_type_extend', to='assets.AssetExtend', verbose_name='\u673a\u5668\u7c7b\u578b'), + ), + ] diff --git a/apps/assets/models.py b/apps/assets/models.py index bd4b2abe9..66612e7b4 100644 --- a/apps/assets/models.py +++ b/apps/assets/models.py @@ -1,5 +1,87 @@ +# coding:utf-8 from __future__ import unicode_literals from django.db import models -# Create your models here. + +class AssetGroup(models.Model): + name = models.CharField(max_length=64, unique=True) + created_by = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"创建者") + comment = models.CharField(max_length=128, blank=True, null=True) + + def __unicode__(self): + return self.name + + class Meta: + db_table = 'assetgroup' + + +class IDC(models.Model): + name = models.CharField(max_length=32, verbose_name=u'机房名称') + bandwidth = models.CharField(max_length=32, blank=True, null=True, default='', verbose_name=u'机房带宽') + contact = models.CharField(max_length=16, blank=True, null=True, default='', verbose_name=u'联系人') + phone = models.CharField(max_length=32, blank=True, null=True, default='', verbose_name=u'联系电话') + address = models.CharField(max_length=128, blank=True, null=True, default='', verbose_name=u"机房地址") + network = models.TextField(blank=True, null=True, default='', verbose_name=u"IP地址段") + date_added = models.DateField(auto_now=True, null=True) + operator = models.CharField(max_length=32, blank=True, default='', null=True, verbose_name=u"运营商") + created_by = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"创建者") + comment = models.CharField(max_length=128, blank=True, default='', null=True, verbose_name=u"备注") + + def __unicode__(self): + return self.name + + class Meta: + db_table = 'idc' + verbose_name = u"IDC机房" + verbose_name_plural = verbose_name + + +class AssetExtend(models.Model): + pass + + +class Asset(models.Model): + ip = models.CharField(max_length=32, blank=True, verbose_name="主机IP") + other_ip = models.CharField(max_length=255, blank=True, null=True, verbose_name="其他IP") + remote_card_ip = models.CharField(max_length=16, blank=True, null=True, verbose_name=u'远控卡IP') + hostname = models.CharField(unique=True, max_length=128, verbose_name=u"主机名") + port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号") + group = models.ManyToManyField(AssetGroup, blank=True, verbose_name=u"所属主机组") + username = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"管理用户名") + password = models.CharField(max_length=256, blank=True, null=True, verbose_name=u"密码") + idc = models.ForeignKey(IDC, blank=True, null=True, on_delete=models.SET_NULL, verbose_name=u'机房') + mac_addr = models.CharField(max_length=20, blank=True, null=True, verbose_name=u"MAC地址") + brand = models.CharField(max_length=64, blank=True, null=True, verbose_name=u'硬件厂商型号') + cpu = models.CharField(max_length=64, blank=True, null=True, verbose_name=u'CPU') + memory = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'内存') + disk = models.CharField(max_length=1024, blank=True, null=True, verbose_name=u'硬盘') + os = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'系统信息') + cabinet_no = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号') + cabinet_pos = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置') + number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号') + status = models.ManyToManyField(AssetExtend, blank=True, related_name="asset_status_extend", verbose_name="机器状态") + type = models.ManyToManyField(AssetExtend, blank=True, related_name="asset_type_extend", verbose_name="机器类型") + env = models.ManyToManyField(AssetExtend, blank=True, related_name="asset_env_extend", verbose_name="所属主机组环境") + sn = models.CharField(max_length=128, blank=True, null=True, verbose_name=u"SN编号") + created_by = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"创建者") + is_active = models.BooleanField(default=True, verbose_name=u"是否激活") + date_added = models.DateTimeField(auto_now=True, null=True) + comment = models.CharField(max_length=128, blank=True, null=True, verbose_name=u"备注") + + def __unicode__(self): + return self.ip + + class Meta: + db_table = 'asset' + + + + + + + + + + + diff --git a/apps/assets/templates/assets/asset_add.html b/apps/assets/templates/assets/asset_add.html new file mode 100644 index 000000000..f42a06c9f --- /dev/null +++ b/apps/assets/templates/assets/asset_add.html @@ -0,0 +1,197 @@ +{% extends 'base.html' %} +{% load bootstrap %} +{% block content %} +