From 73f5891f8724ce6b45b366aa984830c1ae0b9e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E4=B8=96=E5=B3=B0?= <93648765@qq.com> Date: Wed, 12 Oct 2016 18:57:51 +0800 Subject: [PATCH] asset:update assets_list by tag --- apps/assets/api.py | 1 - apps/assets/forms.py | 4 +- apps/assets/templates/assets/asset_list.html | 274 +++++++++++++----- .../templates/assets/asset_tag_create.html | 118 ++++++++ .../templates/assets/asset_tag_detail.html | 219 ++++++++++++++ .../templates/assets/asset_tags_list.html | 56 ++++ apps/assets/templatetags/asset_tags.py | 6 + apps/assets/templatetags/example_tags.py | 0 apps/assets/utils.py | 35 ++- apps/assets/views.py | 26 +- apps/common/templatetags/common_tags.py | 4 + apps/static/css/jumpserver.css | 19 ++ apps/static/css/plugins/inputTags.css | 4 +- apps/templates/_base_list.html | 6 +- 14 files changed, 683 insertions(+), 89 deletions(-) create mode 100644 apps/assets/templates/assets/asset_tag_create.html create mode 100644 apps/assets/templates/assets/asset_tag_detail.html create mode 100644 apps/assets/templates/assets/asset_tags_list.html create mode 100644 apps/assets/templatetags/asset_tags.py delete mode 100644 apps/assets/templatetags/example_tags.py diff --git a/apps/assets/api.py b/apps/assets/api.py index 02b94b214..534e837eb 100644 --- a/apps/assets/api.py +++ b/apps/assets/api.py @@ -51,4 +51,3 @@ class IDCViewSet(viewsets.ReadOnlyModelViewSet): queryset = IDC.objects.all() serializer_class = IDCSerializer - diff --git a/apps/assets/forms.py b/apps/assets/forms.py index 7273075f2..99e12104f 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -26,12 +26,10 @@ class AssetCreateForm(forms.ModelForm): def __init__(self, *args, **kwargs): instance = kwargs.get('instance', None) - if instance: initial = kwargs.get('initial', {}) - tags = instance.tags.all() + #tags = instance.tags.all() initial['tags'] = [t.pk for t in kwargs['instance'].tags.all()] - print(kwargs.get('initial')) super(AssetCreateForm, self).__init__(*args, **kwargs) def _save_m2m(self): diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html index 90ec813cc..70b7d696d 100644 --- a/apps/assets/templates/assets/asset_list.html +++ b/apps/assets/templates/assets/asset_list.html @@ -1,78 +1,214 @@ -{% extends '_base_list.html' %} +{% extends 'base.html' %} +{% load static %} {% load i18n %} {% load common_tags %} -{% block content_left_head %} - {% trans "Create asset" %} +{% block custom_head_css_js %} + + + + + {% endblock %} -{% block table_head %} - - - - {% trans 'Hostname' %} - {% trans 'IP' %} - {% trans 'Port' %} - {% trans 'Type' %} - {% trans 'Hardware' %} - {% trans 'Valid' %} - -{% endblock %} - -{% block table_body %} - {% for asset in asset_list %} - - - - - - - {{ asset.hostname }} - - - {{ asset.ip }} - {{ asset.port }} - {{ asset.type }} - {{ asset.cpu }} {{ asset.memory }} {{ asset.disk }} - - {% if asset.is_valid.0 %} - - {% else %} - - {% endif %} - - - {% trans 'Update' %} - {% trans 'Delete' %} - - - {% endfor %} - -{% endblock %} - -{% block content_bottom_left %} - - {% for tag in tag_list %} - - {{ tag.1}}({{ tag.2 }}) - +{% block content %} +
+
+
+
+
+
+ + + + + +
+
+
+
+ + {% block content_left_head %}{% endblock %} + {% block table_search %}{% endblock %} +
+{% block table_container %} + + + + + + + + + + + + + + + {% for asset in asset_list %} + + + + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Type' %}{% trans 'Hardware' %}{% trans 'Valid' %}
{{ asset.hostname }}{{ asset.ip }}{{ asset.port }}{{ asset.type }}{{ asset.cpu }} {{ asset.memory }} {{ asset.disk }} + {% if asset.is_valid.0 %} + + {% else %} + + {% endif %} + + {% trans 'Update' %} + {% trans 'Delete' %} +
+{% endblock %} +
+
+ {# Update batch #} + {% block content_bottom_left %} + + {% endblock %} +
+ {% block table_pagination %} + {% include '_pagination.html' %} + {% endblock %} +
+
+
+
+
+
{% endblock %} +{% block custom_foot_js %} + +{% endblock %} diff --git a/apps/assets/templates/assets/asset_tag_create.html b/apps/assets/templates/assets/asset_tag_create.html new file mode 100644 index 000000000..fe5218cc4 --- /dev/null +++ b/apps/assets/templates/assets/asset_tag_create.html @@ -0,0 +1,118 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + + +{% endblock %} +{% block content %} +
+
+
+
+
+
{{ action }}
+ +
+ +
+
+
+
+
+
+ {% csrf_token %} +

基本信息

+ {{ form.name|bootstrap_horizontal }} +
+ +
+ +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + +{% endblock %} + +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/asset_tag_detail.html b/apps/assets/templates/assets/asset_tag_detail.html new file mode 100644 index 000000000..983039cae --- /dev/null +++ b/apps/assets/templates/assets/asset_tag_detail.html @@ -0,0 +1,219 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {{ asset_tag.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + +
{% trans 'Tag Name' %}:{{ asset_tag.name }}
{% trans 'Created by' %}:{{ asset_tag.created_by }}
{% trans 'Date created' %}:{{ asset_tag.created_time|date:"Y-m-d H:i:s" }}
+
+
+ +
+
+ {% trans 'Asset list of ' %} {{ asset_tag.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + {% for asset in page_obj %} + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Alive' %}
{{ asset.hostname }}{{ asset.ip }}{{ asset.port }}Alive
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Associate system user' %} +
+
+ + + + + + + + + + + + + + + {% for group in user.groups.all %} + + + + + {% endfor %} + +
{% trans 'repush system user' %}: + + + +
+ +
+ +
{{ group.name }} + +
+
+
+ +
+
+ {% trans 'Add asset to this group' %} +
+
+ + + + + + + + + + + {% for group in user.groups.all %} + + + + + {% endfor %} + +
+ +
+ +
{{ group.name }} + +
+
+
+ +
+
+
+
+
+
+ + +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/asset_tags_list.html b/apps/assets/templates/assets/asset_tags_list.html new file mode 100644 index 000000000..499ab9288 --- /dev/null +++ b/apps/assets/templates/assets/asset_tags_list.html @@ -0,0 +1,56 @@ +{% extends '_base_list.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create tag" %} +{% endblock %} + +{% block table_head %} + + + + {% trans 'Tag Name' %} + {% trans 'Asset num' %} + +{% endblock %} + +{% block table_body %} + + {% for asset_tag in asset_tags_list %} + + + + + + + {{ asset_tag.name }} + + + {{ asset_tag.asset_set.count }} + + {% trans 'Update' %} + {% trans 'Delete' %} + + + {% endfor %} +{% endblock %} + +{% block content_bottom_left %} + +{% endblock %} diff --git a/apps/assets/templatetags/asset_tags.py b/apps/assets/templatetags/asset_tags.py new file mode 100644 index 000000000..829ab2a80 --- /dev/null +++ b/apps/assets/templatetags/asset_tags.py @@ -0,0 +1,6 @@ + +from django import template +from django.utils import timezone +from django.conf import settings +register = template.Library() + diff --git a/apps/assets/templatetags/example_tags.py b/apps/assets/templatetags/example_tags.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/assets/utils.py b/apps/assets/utils.py index 593249287..85e8b183f 100644 --- a/apps/assets/utils.py +++ b/apps/assets/utils.py @@ -1,5 +1,38 @@ # ~*~ coding: utf-8 ~*~ # from rest_framework import serializers -from models import Asset +from models import Tag +from django.views.generic.edit import CreateView +class CreateAssetTagsMiXin(CreateView): + def get_form_kwargs(self): + tags_list = self.request.POST.getlist('tags') + kwargs = { + 'initial': self.get_initial(), + 'prefix': self.get_prefix(), + } + if self.request.method in ('POST', 'PUT'): + post_data = self.request.POST.copy() + if post_data.has_key('tags'): + post_data.pop('tags') + for t in tags_list: + try: + oTag = Tag.objects.get(pk=int(t)) + except (Tag.DoesNotExist,UnicodeEncodeError): + oTag = Tag(name=t,created_by=self.request.user.username or 'Admin') + oTag.save() + post_data.update({'tags':oTag.pk}) + else: + post_data.update({'tags':int(t)}) + kwargs.update({ + 'data': post_data, + 'files': self.request.FILES, + }) + return kwargs + +class UpdateAssetTagsMiXin(CreateAssetTagsMiXin): + def get_form_kwargs(self): + kwargs = super(UpdateAssetTagsMiXin, self).get_form_kwargs() + if hasattr(self, 'object'): + kwargs.update({'instance': self.object}) + return kwargs \ No newline at end of file diff --git a/apps/assets/views.py b/apps/assets/views.py index 357459ced..a051752e4 100644 --- a/apps/assets/views.py +++ b/apps/assets/views.py @@ -12,6 +12,7 @@ from django.views.generic.detail import DetailView, SingleObjectMixin from django.shortcuts import get_object_or_404, reverse, redirect from common.utils import int_seq +from .utils import CreateAssetTagsMiXin,UpdateAssetTagsMiXin from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser, Tag from .forms import * from .hands import AdminUserRequiredMixin @@ -37,7 +38,7 @@ class AssetListView(AdminUserRequiredMixin, ListView): def get_context_data(self, **kwargs): context = { 'app': 'Assets', - 'action': 'Asset list', + 'action': 'asset list', 'tag_list': [(i.id,i.name,i.asset_set.all().count())for i in Tag.objects.all().order_by('name')] } @@ -45,24 +46,23 @@ class AssetListView(AdminUserRequiredMixin, ListView): return super(AssetListView, self).get_context_data(**kwargs) -class AssetCreateView(AdminUserRequiredMixin, CreateView): +class AssetCreateView(AdminUserRequiredMixin,CreateAssetTagsMiXin,CreateView): model = Asset tag_type = 'asset' form_class = AssetCreateForm template_name = 'assets/asset_create.html' success_url = reverse_lazy('assets:asset-list') - def form_invalid(self, form): + def form_valid(self, form): + asset = form.save() + asset.created_by = self.request.user.username or 'Admin' + asset.save() + return super(AssetCreateView, self).form_valid(form) - #tags = form.cleaned_data['tags'] + def form_invalid(self, form): print(form.errors) return super(AssetCreateView, self).form_invalid(form) - def form_valid(self, form): - tag_name_list = form.cleaned_data['tags'] - # print self.tag_type,tag_name_list - return super(AssetCreateView, self).form_valid(form) - def get_context_data(self, **kwargs): context = { @@ -74,7 +74,9 @@ class AssetCreateView(AdminUserRequiredMixin, CreateView): return super(AssetCreateView, self).get_context_data(**kwargs) -class AssetUpdateView(AdminUserRequiredMixin, UpdateView): + + +class AssetUpdateView(AdminUserRequiredMixin,UpdateAssetTagsMiXin,UpdateView): model = Asset form_class = AssetCreateForm template_name = 'assets/asset_update.html' @@ -90,7 +92,6 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateView): def form_invalid(self, form): print(form.errors) - print "jsf" return super(AssetUpdateView, self).form_invalid(form) @@ -581,7 +582,10 @@ class TagView(ListView): return asset_list def get_context_data(self, **kwargs): + kwargs['app'] = 'Assets' + kwargs['action']='asset list' kwargs['tag_list'] = [(i.id,i.name,i.asset_set.all().count() )for i in Tag.objects.all().order_by('name')] + kwargs['tag_id'] = self.kwargs['tag_id'] return super(TagView, self).get_context_data(**kwargs) diff --git a/apps/common/templatetags/common_tags.py b/apps/common/templatetags/common_tags.py index 22f5133be..253f6d741 100644 --- a/apps/common/templatetags/common_tags.py +++ b/apps/common/templatetags/common_tags.py @@ -43,3 +43,7 @@ def join_attr(seq, attr=None, sep=None): seq = [getattr(obj, attr) for obj in seq] print(seq) return sep.join(seq) + +@register.filter +def IntToStr(value): + return str(value) \ No newline at end of file diff --git a/apps/static/css/jumpserver.css b/apps/static/css/jumpserver.css index 4bfc4324c..cbfefe843 100644 --- a/apps/static/css/jumpserver.css +++ b/apps/static/css/jumpserver.css @@ -196,3 +196,22 @@ table.dataTable tbody td.selected td i.text-navy .m-r-30 { margin-right: 30px !important; } + +.ydxbd { + font-size: 12px; + width: 100%; + overflow: hidden; + padding-top: 15px; + margin-bottom: 15px; + display: block; + background: #f4f4f4; + padding-left: 10px; +} +.mar { + margin-left: 2px; + line-height: 15px; +} +.mar-j { + margin-left: 3px; + margin-right: 3px; +} \ No newline at end of file diff --git a/apps/static/css/plugins/inputTags.css b/apps/static/css/plugins/inputTags.css index 89f953f01..36ac4543d 100644 --- a/apps/static/css/plugins/inputTags.css +++ b/apps/static/css/plugins/inputTags.css @@ -1,5 +1,5 @@ -@import url("https://fonts.useso.com/css?family=Open+Sans:300,400,600,700"); -@import url("https://fonts.useso.com/css?family=Roboto:400,300,500,700"); +@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700"); +@import url("https://fonts.googleapis.com/css?family=Roboto:400,300,500,700"); /** {*/ /*box-sizing: border-box;*/ /*}*/ diff --git a/apps/templates/_base_list.html b/apps/templates/_base_list.html index aad77bc04..1fcd0a507 100644 --- a/apps/templates/_base_list.html +++ b/apps/templates/_base_list.html @@ -14,9 +14,11 @@
-
{{ action }}
+
+ {{ action }} +