From 72a82c41ee2b2217fcb96dca0a3cd4b9eea59c9d Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 9 Jan 2018 23:07:53 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=20success=20messa?= =?UTF-8?q?ge,=20=E6=B7=BB=E5=8A=A0=E8=B5=84=E4=BA=A7=E7=BB=84=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=B7=BB=E5=8A=A0=E8=B5=84=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/forms.py | 25 +- apps/assets/models/asset.py | 2 +- apps/assets/signals_handler.py | 9 +- .../templates/assets/asset_group_create.html | 124 +----- apps/assets/views/admin_user.py | 35 +- apps/assets/views/asset.py | 14 +- apps/assets/views/cluster.py | 19 +- apps/assets/views/group.py | 43 +-- apps/assets/views/system_user.py | 42 +- apps/common/const.py | 7 + apps/jumpserver/settings.py | 1 + apps/locale/zh/LC_MESSAGES/django.mo | Bin 30609 -> 30126 bytes apps/locale/zh/LC_MESSAGES/django.po | 362 +++++++++--------- apps/perms/views.py | 60 +-- .../users/user_group_create_update.html | 18 +- apps/users/views/group.py | 24 +- apps/users/views/user.py | 17 +- 17 files changed, 313 insertions(+), 489 deletions(-) create mode 100644 apps/common/const.py diff --git a/apps/assets/forms.py b/apps/assets/forms.py index 72d38f85f..3ff8bb900 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -124,20 +124,25 @@ class AssetGroupForm(forms.ModelForm): label=_('Asset'), required=False, widget=forms.SelectMultiple( - attrs={'class': 'select2', 'data-placeholder': _('Select assets')}) + attrs={'class': 'select2', 'data-placeholder': _('Select assets')} ) + ) - def __init__(self, *args, **kwargs): - if kwargs.get('instance', None): + def __init__(self, **kwargs): + instance = kwargs.get('instance') + if instance: initial = kwargs.get('initial', {}) - initial['assets'] = kwargs['instance'].assets.all() - super(AssetGroupForm, self).__init__(*args, **kwargs) + initial.update({ + 'assets': instance.assets.all(), + }) + kwargs['initial'] = initial + super().__init__(**kwargs) - def _save_m2m(self): - super(AssetGroupForm, self)._save_m2m() - assets = self.cleaned_data['assets'] - self.instance.assets.clear() - self.instance.assets.add(*tuple(assets)) + def save(self, commit=True): + group = super().save(commit=commit) + assets= self.cleaned_data['assets'] + group.assets.set(assets) + return group class Meta: model = AssetGroup diff --git a/apps/assets/models/asset.py b/apps/assets/models/asset.py index 276b767d3..3d3ed6b10 100644 --- a/apps/assets/models/asset.py +++ b/apps/assets/models/asset.py @@ -44,7 +44,7 @@ class Asset(models.Model): hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname')) port = models.IntegerField(default=22, verbose_name=_('Port')) groups = models.ManyToManyField(AssetGroup, blank=True, related_name='assets', verbose_name=_('Asset groups')) - cluster = models.ForeignKey(Cluster, blank=True, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('Cluster')) + cluster = models.ForeignKey(Cluster, related_name='assets', on_delete=models.PROTECT, verbose_name=_('Cluster')) is_active = models.BooleanField(default=True, verbose_name=_('Is active')) type = models.CharField(choices=TYPE_CHOICES, max_length=16, blank=True, null=True, default='Server', verbose_name=_('Asset type'),) env = models.CharField(choices=ENV_CHOICES, max_length=8, blank=True, null=True, default='Prod', verbose_name=_('Asset environment'),) diff --git a/apps/assets/signals_handler.py b/apps/assets/signals_handler.py index b21c0377f..9e6eb21eb 100644 --- a/apps/assets/signals_handler.py +++ b/apps/assets/signals_handler.py @@ -27,10 +27,11 @@ def test_asset_conn_on_created(asset): def push_cluster_system_users_to_asset(asset): - logger.info("Push cluster system user to asset: {}".format(asset)) - task_name = _("Push cluster system users to asset") - system_users = asset.cluster.systemuser_set.all() - push_system_user_util.delay(system_users, [asset], task_name) + if asset.cluster: + logger.info("Push cluster system user to asset: {}".format(asset)) + task_name = _("Push cluster system users to asset") + system_users = asset.cluster.systemuser_set.all() + push_system_user_util.delay(system_users, [asset], task_name) @receiver(post_save, sender=Asset, dispatch_uid="my_unique_identifier") diff --git a/apps/assets/templates/assets/asset_group_create.html b/apps/assets/templates/assets/asset_group_create.html index 3b951d4d1..36ca40fc1 100644 --- a/apps/assets/templates/assets/asset_group_create.html +++ b/apps/assets/templates/assets/asset_group_create.html @@ -1,119 +1,31 @@ -{% extends 'base.html' %} -{% load i18n %} +{% extends '_base_create_update.html' %} {% load static %} {% load bootstrap3 %} -{% block custom_head_css_js %} - - -{% endblock %} -{% block content %} -
-
-
-
-
-
{{ action }}
- -
+{% load i18n %} -
-
-
-
-
- {% csrf_token %} -

资产组信息

- {% bootstrap_field form.name layout="horizontal" %} - {% bootstrap_field form.comment layout="horizontal" %} -{#
#} -{#

用户选择的资产

#} -{#
#} -{# #} -{#
#} -{#
#} -{#

#} -{# {% for asset in assets_on_list %}#} -{# #} -{# {% endfor %}#} -{#

#} -{#
#} -{#
#} -{#
#} -
-
-
- - -
-
-
-
-
-
-
-
-
+{% block form %} +
+ {% csrf_token %} + {% bootstrap_field form.name layout="horizontal" %} + {% bootstrap_field form.assets layout="horizontal" %} + {% bootstrap_field form.comment layout="horizontal" %} + +
+
+
+ +
-
- - - - + {% endblock %} {% block custom_foot_js %} {% endblock %} \ No newline at end of file diff --git a/apps/assets/views/admin_user.py b/apps/assets/views/admin_user.py index 713f1fc53..e3f6bc6b3 100644 --- a/apps/assets/views/admin_user.py +++ b/apps/assets/views/admin_user.py @@ -2,20 +2,22 @@ from __future__ import absolute_import, unicode_literals from django.utils.translation import ugettext as _ from django.conf import settings -from django.views.generic import TemplateView, ListView, View -from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.urls import reverse_lazy +from django.views.generic import TemplateView, ListView +from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.contrib.messages.views import SuccessMessageMixin from django.views.generic.detail import DetailView, SingleObjectMixin +from common.const import create_success_msg, update_success_msg from .. import forms -from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser +from ..models import AdminUser, Cluster from ..hands import AdminUserRequiredMixin -__all__ = ['AdminUserCreateView', 'AdminUserDetailView', - 'AdminUserDeleteView', 'AdminUserListView', - 'AdminUserUpdateView', 'AdminUserAssetsView', - ] +__all__ = [ + 'AdminUserCreateView', 'AdminUserDetailView', + 'AdminUserDeleteView', 'AdminUserListView', + 'AdminUserUpdateView', 'AdminUserAssetsView', +] class AdminUserListView(AdminUserRequiredMixin, TemplateView): @@ -38,6 +40,7 @@ class AdminUserCreateView(AdminUserRequiredMixin, form_class = forms.AdminUserForm template_name = 'assets/admin_user_create_update.html' success_url = reverse_lazy('assets:admin-user-list') + success_message = create_success_msg def get_context_data(self, **kwargs): context = { @@ -47,20 +50,13 @@ class AdminUserCreateView(AdminUserRequiredMixin, kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_message(self, cleaned_data): - success_message = _( - 'Create admin user {name} successfully.'.format( - url=reverse_lazy('assets:admin-user-detail', - kwargs={'pk': self.object.pk}), - name=self.object.name, - )) - return success_message - -class AdminUserUpdateView(AdminUserRequiredMixin, UpdateView): +class AdminUserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = AdminUser form_class = forms.AdminUserForm template_name = 'assets/admin_user_create_update.html' + success_url = reverse_lazy('assets:admin-user-list') + success_message = update_success_msg def get_context_data(self, **kwargs): context = { @@ -70,11 +66,6 @@ class AdminUserUpdateView(AdminUserRequiredMixin, UpdateView): kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_url(self): - success_url = reverse_lazy('assets:admin-user-detail', - kwargs={'pk': self.object.pk}) - return success_url - class AdminUserDetailView(AdminUserRequiredMixin, DetailView): model = AdminUser diff --git a/apps/assets/views/asset.py b/apps/assets/views/asset.py index 1c0e2ce1a..d251b7a15 100644 --- a/apps/assets/views/asset.py +++ b/apps/assets/views/asset.py @@ -21,10 +21,11 @@ from django.core.cache import cache from django.utils import timezone from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import redirect - +from django.contrib.messages.views import SuccessMessageMixin from common.mixins import JSONResponseMixin from common.utils import get_object_or_none, get_logger, is_uuid +from common.const import create_success_msg, update_success_msg from .. import forms from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser from ..hands import AdminUserRequiredMixin @@ -46,7 +47,6 @@ class AssetListView(AdminUserRequiredMixin, TemplateView): context = { 'app': _('Assets'), 'action': _('Asset list'), - # 'groups': AssetGroup.objects.all(), 'system_users': SystemUser.objects.all(), } kwargs.update(context) @@ -66,7 +66,7 @@ class UserAssetListView(LoginRequiredMixin, TemplateView): return super().get_context_data(**kwargs) -class AssetCreateView(AdminUserRequiredMixin, CreateView): +class AssetCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): model = Asset form_class = forms.AssetCreateForm template_name = 'assets/asset_create.html' @@ -87,6 +87,9 @@ class AssetCreateView(AdminUserRequiredMixin, CreateView): kwargs.update(context) return super().get_context_data(**kwargs) + def get_success_message(self, cleaned_data): + return create_success_msg % ({"name": cleaned_data["hostname"]}) + class AssetModalListView(AdminUserRequiredMixin, ListView): paginate_by = settings.CONFIG.DISPLAY_PER_PAGE @@ -147,7 +150,7 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView): return super().get_context_data(**kwargs) -class AssetUpdateView(AdminUserRequiredMixin, UpdateView): +class AssetUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = Asset form_class = forms.AssetUpdateForm template_name = 'assets/asset_update.html' @@ -161,6 +164,9 @@ class AssetUpdateView(AdminUserRequiredMixin, UpdateView): kwargs.update(context) return super().get_context_data(**kwargs) + def get_success_message(self, cleaned_data): + return update_success_msg % ({"name": cleaned_data["hostname"]}) + class AssetDeleteView(AdminUserRequiredMixin, DeleteView): model = Asset diff --git a/apps/assets/views/cluster.py b/apps/assets/views/cluster.py index f8540bed1..567e881dd 100644 --- a/apps/assets/views/cluster.py +++ b/apps/assets/views/cluster.py @@ -1,17 +1,21 @@ # coding:utf-8 -from __future__ import absolute_import, unicode_literals from django.utils.translation import ugettext as _ from django.views.generic import TemplateView, ListView, View from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.urls import reverse_lazy from django.views.generic.detail import DetailView, SingleObjectMixin +from django.contrib.messages.views import SuccessMessageMixin + +from common.const import create_success_msg, update_success_msg from .. import forms from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser from ..hands import AdminUserRequiredMixin -__all__ = ['ClusterListView', 'ClusterCreateView', 'ClusterUpdateView', - 'ClusterDetailView', 'ClusterDeleteView', 'ClusterAssetsView'] +__all__ = [ + 'ClusterListView', 'ClusterCreateView', 'ClusterUpdateView', + 'ClusterDetailView', 'ClusterDeleteView', 'ClusterAssetsView', +] class ClusterListView(AdminUserRequiredMixin, TemplateView): @@ -21,17 +25,17 @@ class ClusterListView(AdminUserRequiredMixin, TemplateView): context = { 'app': _('Assets'), 'action': _('Cluster list'), - # 'keyword': self.request.GET.get('keyword', '') } kwargs.update(context) return super().get_context_data(**kwargs) -class ClusterCreateView(AdminUserRequiredMixin, CreateView): +class ClusterCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): model = Cluster form_class = forms.ClusterForm template_name = 'assets/cluster_create_update.html' success_url = reverse_lazy('assets:cluster-list') + success_message = create_success_msg def get_context_data(self, **kwargs): context = { @@ -43,17 +47,18 @@ class ClusterCreateView(AdminUserRequiredMixin, CreateView): def form_valid(self, form): cluster = form.save(commit=False) - cluster.created_by = self.request.user.username or 'System' + cluster.created_by = self.request.user.username cluster.save() return super().form_valid(form) -class ClusterUpdateView(AdminUserRequiredMixin, UpdateView): +class ClusterUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = Cluster form_class = forms.ClusterForm template_name = 'assets/cluster_create_update.html' context_object_name = 'cluster' success_url = reverse_lazy('assets:cluster-list') + success_message = update_success_msg def form_valid(self, form): cluster = form.save(commit=False) diff --git a/apps/assets/views/group.py b/apps/assets/views/group.py index 5e87d9dc7..0ae65eaa0 100644 --- a/apps/assets/views/group.py +++ b/apps/assets/views/group.py @@ -7,42 +7,41 @@ from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateVi from django.urls import reverse_lazy from django.views.generic.detail import DetailView, SingleObjectMixin from django.shortcuts import get_object_or_404, reverse, redirect +from django.contrib.messages.views import SuccessMessageMixin +from common.const import create_success_msg, update_success_msg from .. import forms from ..models import Asset, AssetGroup, AdminUser, Cluster, SystemUser from ..hands import AdminUserRequiredMixin -__all__ = ['AssetGroupCreateView', 'AssetGroupDetailView', - 'AssetGroupUpdateView', 'AssetGroupListView', - 'AssetGroupDeleteView', - ] +__all__ = [ + 'AssetGroupCreateView', 'AssetGroupDetailView', + 'AssetGroupUpdateView', 'AssetGroupListView', + 'AssetGroupDeleteView', +] -class AssetGroupCreateView(AdminUserRequiredMixin, CreateView): +class AssetGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): model = AssetGroup form_class = forms.AssetGroupForm template_name = 'assets/asset_group_create.html' success_url = reverse_lazy('assets:asset-group-list') + success_message = create_success_msg def get_context_data(self, **kwargs): context = { 'app': _('Assets'), 'action': _('Create asset group'), - 'assets_count': 0, } kwargs.update(context) - return super(AssetGroupCreateView, self).get_context_data(**kwargs) + return super().get_context_data(**kwargs) def form_valid(self, form): - asset_group = form.save() - assets_id_list = self.request.POST.getlist('assets', []) - assets = [get_object_or_404(Asset, id=int(asset_id)) - for asset_id in assets_id_list] - asset_group.created_by = self.request.user.username or 'Admin' - asset_group.assets.add(*tuple(assets)) - asset_group.save() - return super(AssetGroupCreateView, self).form_valid(form) + group = form.save() + group.created_by = self.request.user.username + group.save() + return super().form_valid(form) class AssetGroupListView(AdminUserRequiredMixin, TemplateView): @@ -54,7 +53,6 @@ class AssetGroupListView(AdminUserRequiredMixin, TemplateView): 'action': _('Asset group list'), 'assets': Asset.objects.all(), 'system_users': SystemUser.objects.all(), - 'keyword': self.request.GET.get('keyword', '') } kwargs.update(context) return super(AssetGroupListView, self).get_context_data(**kwargs) @@ -77,27 +75,20 @@ class AssetGroupDetailView(AdminUserRequiredMixin, DetailView): return super().get_context_data(**kwargs) -class AssetGroupUpdateView(AdminUserRequiredMixin, UpdateView): +class AssetGroupUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = AssetGroup form_class = forms.AssetGroupForm template_name = 'assets/asset_group_create.html' success_url = reverse_lazy('assets:asset-group-list') - - def get(self, request, *args, **kwargs): - self.object = self.get_object(queryset=AssetGroup.objects.all()) - return super(AssetGroupUpdateView, self).get(request, *args, **kwargs) + success_message = update_success_msg def get_context_data(self, **kwargs): - assets_all = self.object.assets.all() context = { 'app': _('Assets'), 'action': _('Create asset group'), - 'assets_on_list': assets_all, - 'assets_count': len(assets_all), - 'group_id': self.object.id, } kwargs.update(context) - return super(AssetGroupUpdateView, self).get_context_data(**kwargs) + return super().get_context_data(**kwargs) class AssetGroupDeleteView(AdminUserRequiredMixin, DeleteView): diff --git a/apps/assets/views/system_user.py b/apps/assets/views/system_user.py index b79827598..6fdd8825d 100644 --- a/apps/assets/views/system_user.py +++ b/apps/assets/views/system_user.py @@ -1,24 +1,25 @@ # ~*~ coding: utf-8 ~*~ -from django.contrib import messages -from django.shortcuts import redirect, reverse +from django.shortcuts import reverse from django.utils.translation import ugettext as _ from django.db import transaction -from django.views.generic import TemplateView, ListView, FormView +from django.views.generic import TemplateView from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.urls import reverse_lazy from django.contrib.messages.views import SuccessMessageMixin -from django.views.generic.detail import DetailView, SingleObjectMixin +from django.views.generic.detail import DetailView -from ..forms import SystemUserForm, SystemUserUpdateForm, SystemUserAuthForm +from common.const import create_success_msg, update_success_msg +from ..forms import SystemUserForm, SystemUserUpdateForm from ..models import SystemUser, Cluster from ..hands import AdminUserRequiredMixin -__all__ = ['SystemUserCreateView', 'SystemUserUpdateView', - 'SystemUserDetailView', 'SystemUserDeleteView', - 'SystemUserAssetView', 'SystemUserListView', - ] +__all__ = [ + 'SystemUserCreateView', 'SystemUserUpdateView', + 'SystemUserDetailView', 'SystemUserDeleteView', + 'SystemUserAssetView', 'SystemUserListView', +] class SystemUserListView(AdminUserRequiredMixin, TemplateView): @@ -38,10 +39,7 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi form_class = SystemUserForm template_name = 'assets/system_user_create.html' success_url = reverse_lazy('assets:system-user-list') - - @transaction.atomic - def post(self, request, *args, **kwargs): - return super(SystemUserCreateView, self).post(request, *args, **kwargs) + success_message = create_success_msg def get_context_data(self, **kwargs): context = { @@ -51,20 +49,13 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_message(self, cleaned_data): - url = reverse('assets:system-user-detail', kwargs={'pk': self.object.pk}) - success_message = _( - 'Create system user {name} ' - 'successfully.'.format(url=url, name=self.object.name) - ) - return success_message - - -class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView): +class SystemUserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = SystemUser form_class = SystemUserUpdateForm template_name = 'assets/system_user_update.html' + success_url = reverse_lazy('assets:system-user-list') + success_message = update_success_msg def get_context_data(self, **kwargs): context = { @@ -74,11 +65,6 @@ class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView): kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_url(self): - success_url = reverse_lazy('assets:system-user-detail', - kwargs={'pk': self.object.pk}) - return success_url - class SystemUserDetailView(AdminUserRequiredMixin, DetailView): template_name = 'assets/system_user_detail.html' diff --git a/apps/common/const.py b/apps/common/const.py new file mode 100644 index 000000000..a28b0f1db --- /dev/null +++ b/apps/common/const.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# + +from django.utils.translation import ugettext as _ + +create_success_msg = _("%(name)s was created successfully") +update_success_msg = _("%(name)s was updated successfully") \ No newline at end of file diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index 214aba3aa..ce2d06ed0 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -374,4 +374,5 @@ BOOTSTRAP3 = { 'horizontal_field_class': 'col-md-9', # Set placeholder attributes to label if no placeholder is provided 'set_placeholder': True, + 'success_css_class': '', } diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 4eed75216922ff6a32dc99b7386330c0373b1c97..5bb422501d5c1e84b09d0fafbf0347cc7c371e46 100644 GIT binary patch delta 10967 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 T{{B4X8#A_*Z}yc58-4!|qc!tm delta 11242 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 ZV0h!e*lSBRUt75GA550>Xw=5Q{{^f+Riyv` diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 910a4fa02..b34a774f4 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-08 15:58+0800\n" +"POT-Creation-Date: 2018-01-09 23:01+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -76,22 +76,22 @@ msgstr "端口" msgid "Asset" msgstr "资产" -#: assets/forms.py:156 perms/forms.py:40 +#: assets/forms.py:161 perms/forms.py:40 #: perms/templates/perms/asset_permission_detail.html:144 users/forms.py:245 msgid "Select system users" msgstr "选择系统用户" -#: assets/forms.py:158 +#: assets/forms.py:163 #: assets/templates/assets/_asset_group_bulk_update_modal.html:22 #: assets/templates/assets/cluster_list.html:22 msgid "System users" msgstr "系统用户" -#: assets/forms.py:160 +#: assets/forms.py:165 msgid "Selected system users will be create at cluster assets" msgstr "选择的系统用户将会在该集群资产上创建" -#: assets/forms.py:168 assets/forms.py:243 assets/forms.py:302 +#: assets/forms.py:173 assets/forms.py:248 assets/forms.py:307 #: assets/models/cluster.py:18 assets/models/group.py:20 #: assets/models/user.py:28 assets/templates/assets/admin_user_detail.html:56 #: assets/templates/assets/admin_user_list.html:22 @@ -120,15 +120,15 @@ msgstr "选择的系统用户将会在该集群资产上创建" msgid "Name" msgstr "名称" -#: assets/forms.py:174 +#: assets/forms.py:179 msgid "Cluster level admin user" msgstr "集群级别管理用户" -#: assets/forms.py:195 +#: assets/forms.py:200 msgid "Password or private key password" msgstr "密码或秘钥不合法" -#: assets/forms.py:196 assets/models/user.py:30 users/forms.py:16 +#: assets/forms.py:201 assets/models/user.py:30 users/forms.py:16 #: users/forms.py:24 users/templates/users/login.html:56 #: users/templates/users/reset_password.html:52 #: users/templates/users/user_create.html:11 @@ -138,19 +138,19 @@ msgstr "密码或秘钥不合法" msgid "Password" msgstr "密码" -#: assets/forms.py:199 users/models/user.py:46 +#: assets/forms.py:204 users/models/user.py:46 msgid "Private key" msgstr "ssh私钥" -#: assets/forms.py:224 assets/forms.py:284 assets/forms.py:345 +#: assets/forms.py:229 assets/forms.py:289 assets/forms.py:350 msgid "Invalid private key" msgstr "ssh密钥不合法" -#: assets/forms.py:235 +#: assets/forms.py:240 msgid "Password and private key file must be input one" msgstr "密码和私钥, 必须输入一个" -#: assets/forms.py:244 assets/forms.py:303 assets/models/user.py:29 +#: assets/forms.py:249 assets/forms.py:308 assets/models/user.py:29 #: assets/templates/assets/admin_user_detail.html:60 #: assets/templates/assets/admin_user_list.html:23 #: assets/templates/assets/system_user_detail.html:57 @@ -166,23 +166,23 @@ msgstr "密码和私钥, 必须输入一个" msgid "Username" msgstr "用户名" -#: assets/forms.py:291 assets/forms.py:351 +#: assets/forms.py:296 assets/forms.py:356 msgid "Auth info required, private_key or password" msgstr "密钥和密码必须填写一个" -#: assets/forms.py:306 +#: assets/forms.py:311 msgid " Select clusters" msgstr "选择集群" -#: assets/forms.py:311 +#: assets/forms.py:316 msgid "If auto push checked, system user will be create at cluster assets" msgstr "如果选择了自动推送,系统用户将会创建在集群资产上" -#: assets/forms.py:312 +#: assets/forms.py:317 msgid "Auto push system user to asset" msgstr "自动推送系统用户到资产" -#: assets/forms.py:313 +#: assets/forms.py:318 msgid "" "High level will be using login asset as default, if user was granted more " "than 2 system user" @@ -260,12 +260,12 @@ msgid "Hostname" msgstr "主机名" #: assets/models/asset.py:46 assets/templates/assets/asset_detail.html:213 -#: assets/views/asset.py:212 assets/views/asset.py:252 +#: assets/views/asset.py:218 assets/views/asset.py:258 msgid "Asset groups" msgstr "资产组" #: assets/models/asset.py:47 assets/models/cluster.py:40 -#: assets/models/user.py:215 assets/templates/assets/asset_detail.html:85 +#: assets/models/user.py:219 assets/templates/assets/asset_detail.html:85 #: assets/templates/assets/asset_list.html:33 templates/_nav.html:24 msgid "Cluster" msgstr "集群" @@ -287,7 +287,7 @@ msgid "Asset status" msgstr "资产状态" #: assets/models/asset.py:54 assets/models/cluster.py:19 -#: assets/models/user.py:186 assets/templates/assets/asset_detail.html:73 +#: assets/models/user.py:190 assets/templates/assets/asset_detail.html:73 #: assets/templates/assets/cluster_list.html:20 templates/_nav.html:25 msgid "Admin user" msgstr "管理用户" @@ -443,7 +443,7 @@ msgstr "运营商" msgid "Default" msgstr "默认" -#: assets/models/cluster.py:36 users/models/user.py:259 +#: assets/models/cluster.py:36 users/models/user.py:263 msgid "System" msgstr "系统" @@ -468,29 +468,29 @@ msgstr "ssh密钥" msgid "SSH public key" msgstr "ssh公钥" -#: assets/models/user.py:216 +#: assets/models/user.py:220 msgid "Priority" msgstr "优先级" -#: assets/models/user.py:217 assets/templates/assets/system_user_detail.html:61 +#: assets/models/user.py:221 assets/templates/assets/system_user_detail.html:61 msgid "Protocol" msgstr "协议" -#: assets/models/user.py:218 assets/templates/assets/_system_user.html:59 +#: assets/models/user.py:222 assets/templates/assets/_system_user.html:59 #: assets/templates/assets/system_user_detail.html:113 #: assets/templates/assets/system_user_update.html:11 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:219 assets/templates/assets/system_user_detail.html:65 +#: assets/models/user.py:223 assets/templates/assets/system_user_detail.html:65 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:220 assets/templates/assets/system_user_detail.html:70 +#: assets/models/user.py:224 assets/templates/assets/system_user_detail.html:70 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:265 perms/models.py:19 +#: assets/models/user.py:269 perms/models.py:19 #: perms/templates/perms/asset_permission_detail.html:136 #: perms/templates/perms/asset_permission_list.html:30 templates/_nav.html:26 #: terminal/backends/command/models.py:12 terminal/models.py:94 @@ -508,15 +508,15 @@ msgstr "系统用户" msgid "%(value)s is not an even number" msgstr "%(value)s is not an even number" -#: assets/signals_handler.py:31 +#: assets/signals_handler.py:32 msgid "Push cluster system users to asset" msgstr "推送集群系统用户到资产" -#: assets/signals_handler.py:63 assets/signals_handler.py:125 +#: assets/signals_handler.py:64 assets/signals_handler.py:126 msgid "Push system user to cluster assets: {}->{}" msgstr "推送系统用户到: {}->{}" -#: assets/signals_handler.py:102 +#: assets/signals_handler.py:103 msgid "Push system user to assets" msgstr "推送系统用户到资产" @@ -552,11 +552,11 @@ msgstr "测试系统用户可连接性: {}" msgid "Test system user connectability period: {}" msgstr "定期测试系统用户可连接性: {}" -#: assets/tasks.py:372 +#: assets/tasks.py:376 msgid "Push system user to cluster assets: {}" msgstr "推送系统用户到资产: {}" -#: assets/tasks.py:393 +#: assets/tasks.py:397 msgid "Push cluster system users to assets period: {}" msgstr "定期推送集群系统用户到资产: {}" @@ -570,16 +570,16 @@ msgstr "仅修改你需要更新的字段" #: assets/templates/assets/_asset_group_bulk_update_modal.html:12 #: assets/templates/assets/system_user_asset.html:21 -#: assets/views/admin_user.py:27 assets/views/admin_user.py:44 -#: assets/views/admin_user.py:67 assets/views/admin_user.py:88 -#: assets/views/admin_user.py:115 assets/views/asset.py:47 -#: assets/views/asset.py:61 assets/views/asset.py:84 assets/views/asset.py:141 -#: assets/views/asset.py:158 assets/views/asset.py:179 -#: assets/views/cluster.py:22 assets/views/cluster.py:80 -#: assets/views/cluster.py:97 assets/views/group.py:30 assets/views/group.py:53 -#: assets/views/group.py:71 assets/views/group.py:93 -#: assets/views/system_user.py:29 assets/views/system_user.py:48 -#: assets/views/system_user.py:71 assets/views/system_user.py:91 +#: assets/views/admin_user.py:29 assets/views/admin_user.py:47 +#: assets/views/admin_user.py:63 assets/views/admin_user.py:79 +#: assets/views/admin_user.py:106 assets/views/asset.py:48 +#: assets/views/asset.py:61 assets/views/asset.py:84 assets/views/asset.py:144 +#: assets/views/asset.py:161 assets/views/asset.py:185 +#: assets/views/cluster.py:26 assets/views/cluster.py:85 +#: assets/views/cluster.py:102 assets/views/group.py:34 +#: assets/views/group.py:52 assets/views/group.py:69 assets/views/group.py:87 +#: assets/views/system_user.py:30 assets/views/system_user.py:46 +#: assets/views/system_user.py:62 assets/views/system_user.py:77 #: templates/_nav.html:19 msgid "Assets" msgstr "资产管理" @@ -620,7 +620,7 @@ msgstr "如果设置了id,则会使用该行信息更新该id的资产" #: assets/templates/assets/_system_user.html:16 #: assets/templates/assets/system_user_list.html:16 -#: assets/views/system_user.py:49 +#: assets/views/system_user.py:47 msgid "Create system user" msgstr "创建系统用户" @@ -657,6 +657,7 @@ msgstr "其它" #: assets/templates/assets/admin_user_create_update.html:45 #: assets/templates/assets/asset_bulk_update.html:23 #: assets/templates/assets/asset_create.html:40 +#: assets/templates/assets/asset_group_create.html:16 #: assets/templates/assets/asset_update.html:55 #: assets/templates/assets/cluster_create_update.html:54 #: perms/templates/perms/asset_permission_create_update.html:67 @@ -675,6 +676,7 @@ msgstr "重置" #: assets/templates/assets/admin_user_create_update.html:46 #: assets/templates/assets/asset_bulk_update.html:24 #: assets/templates/assets/asset_create.html:41 +#: assets/templates/assets/asset_group_create.html:17 #: assets/templates/assets/asset_list.html:55 #: assets/templates/assets/asset_update.html:56 #: assets/templates/assets/cluster_create_update.html:55 @@ -711,6 +713,52 @@ msgstr "详情" msgid "Assets list" msgstr "资产列表" +#: assets/templates/assets/admin_user_assets.html:24 +#: assets/templates/assets/admin_user_detail.html:24 +#: assets/templates/assets/admin_user_list.html:83 +#: assets/templates/assets/asset_detail.html:24 +#: assets/templates/assets/asset_group_detail.html:18 +#: assets/templates/assets/asset_group_detail.html:172 +#: assets/templates/assets/asset_group_list.html:42 +#: assets/templates/assets/asset_list.html:95 +#: assets/templates/assets/cluster_assets.html:170 +#: assets/templates/assets/cluster_detail.html:25 +#: assets/templates/assets/cluster_list.html:43 +#: assets/templates/assets/system_user_asset.html:25 +#: assets/templates/assets/system_user_detail.html:26 +#: assets/templates/assets/system_user_list.html:84 +#: perms/templates/perms/asset_permission_detail.html:30 +#: perms/templates/perms/asset_permission_list.html:73 +#: terminal/templates/terminal/terminal_detail.html:16 +#: terminal/templates/terminal/terminal_list.html:71 +#: users/templates/users/user_detail.html:25 +#: users/templates/users/user_group_detail.html:28 +#: users/templates/users/user_group_list.html:39 +#: users/templates/users/user_list.html:76 +msgid "Update" +msgstr "更新" + +#: assets/templates/assets/admin_user_assets.html:28 +#: assets/templates/assets/admin_user_detail.html:28 +#: assets/templates/assets/admin_user_list.html:84 +#: assets/templates/assets/asset_detail.html:28 +#: assets/templates/assets/asset_group_list.html:43 +#: assets/templates/assets/asset_list.html:96 +#: assets/templates/assets/cluster_detail.html:29 +#: assets/templates/assets/cluster_list.html:44 +#: assets/templates/assets/system_user_list.html:85 +#: ops/templates/ops/task_list.html:71 +#: perms/templates/perms/asset_permission_detail.html:34 +#: perms/templates/perms/asset_permission_list.html:74 +#: terminal/templates/terminal/terminal_list.html:73 +#: users/templates/users/user_detail.html:29 +#: users/templates/users/user_group_detail.html:32 +#: users/templates/users/user_group_list.html:41 +#: users/templates/users/user_list.html:80 +#: users/templates/users/user_list.html:84 +msgid "Delete" +msgstr "删除" + #: assets/templates/assets/admin_user_assets.html:37 #: assets/templates/assets/asset_group_detail.html:26 #: perms/templates/perms/asset_permission_asset.html:35 @@ -760,7 +808,7 @@ msgstr "任务已下发,查看左侧资产状态" #: assets/templates/assets/admin_user_create_update.html:16 #: assets/templates/assets/admin_user_list.html:14 -#: assets/views/admin_user.py:45 +#: assets/views/admin_user.py:48 msgid "Create admin user" msgstr "创建管理用户" @@ -780,7 +828,7 @@ msgstr "使用集群管理用户" #: users/templates/users/user_detail.html:338 #: users/templates/users/user_detail.html:363 #: users/templates/users/user_detail.html:386 -#: users/templates/users/user_group_create_update.html:46 +#: users/templates/users/user_group_create_update.html:32 #: users/templates/users/user_group_list.html:82 #: users/templates/users/user_list.html:184 #: users/templates/users/user_profile.html:181 @@ -817,41 +865,13 @@ msgstr "比例" msgid "Action" msgstr "动作" -#: assets/templates/assets/admin_user_list.html:83 -#: assets/templates/assets/asset_group_detail.html:172 -#: assets/templates/assets/asset_group_list.html:42 -#: assets/templates/assets/asset_list.html:95 -#: assets/templates/assets/cluster_assets.html:170 -#: assets/templates/assets/cluster_list.html:43 -#: assets/templates/assets/system_user_list.html:84 -#: perms/templates/perms/asset_permission_list.html:73 -#: terminal/templates/terminal/terminal_list.html:71 -#: users/templates/users/user_group_list.html:39 -#: users/templates/users/user_list.html:76 -msgid "Update" -msgstr "更新" - -#: assets/templates/assets/admin_user_list.html:84 -#: assets/templates/assets/asset_group_list.html:43 -#: assets/templates/assets/asset_list.html:96 -#: assets/templates/assets/cluster_list.html:44 -#: assets/templates/assets/system_user_list.html:85 -#: ops/templates/ops/task_list.html:70 -#: perms/templates/perms/asset_permission_list.html:74 -#: terminal/templates/terminal/terminal_list.html:73 -#: users/templates/users/user_group_list.html:41 -#: users/templates/users/user_list.html:80 -#: users/templates/users/user_list.html:84 -msgid "Delete" -msgstr "删除" - #: assets/templates/assets/asset_create.html:28 #: assets/templates/assets/asset_update.html:33 msgid "Group" msgstr "组" -#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:180 -#: assets/views/cluster.py:98 +#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:186 +#: assets/views/cluster.py:103 msgid "Asset detail" msgstr "资产详情" @@ -937,8 +957,8 @@ msgstr "添加" msgid "Remove" msgstr "移除" -#: assets/templates/assets/asset_group_list.html:7 assets/views/group.py:31 -#: assets/views/group.py:94 +#: assets/templates/assets/asset_group_list.html:7 assets/views/group.py:35 +#: assets/views/group.py:88 msgid "Create asset group" msgstr "创建资产组" @@ -1062,6 +1082,7 @@ msgid "Test assets connective" msgstr "测试资产可连接性" #: assets/templates/assets/cluster_assets.html:77 +#: ops/templates/ops/task_list.html:70 msgid "Run" msgstr "执行" @@ -1083,7 +1104,7 @@ msgstr "任务已下发,查看左侧资产状态" msgid "Settings" msgstr "设置" -#: assets/templates/assets/cluster_list.html:11 assets/views/cluster.py:39 +#: assets/templates/assets/cluster_list.html:11 assets/views/cluster.py:43 msgid "Create Cluster" msgstr "创建Cluster" @@ -1180,85 +1201,86 @@ msgstr "连接性" msgid "Connect" msgstr "连接" -#: assets/views/admin_user.py:28 +#: assets/views/admin_user.py:30 msgid "Admin user list" msgstr "管理用户列表" -#: assets/views/admin_user.py:52 -#, python-brace-format -msgid "Create admin user {name} successfully." -msgstr "创建管理用户 {name} 成功" - -#: assets/views/admin_user.py:68 +#: assets/views/admin_user.py:64 msgid "Update admin user" msgstr "更新管理用户" -#: assets/views/admin_user.py:89 assets/views/admin_user.py:116 +#: assets/views/admin_user.py:80 assets/views/admin_user.py:107 msgid "Admin user detail" msgstr "管理用户详情" -#: assets/views/asset.py:48 assets/views/asset.py:62 +#: assets/views/asset.py:49 assets/views/asset.py:62 msgid "Asset list" msgstr "资产列表" -#: assets/views/asset.py:142 +#: assets/views/asset.py:145 msgid "Bulk update asset" msgstr "批量更新资产" -#: assets/views/asset.py:159 +#: assets/views/asset.py:162 msgid "Update asset" msgstr "编辑资产" -#: assets/views/asset.py:292 +#: assets/views/asset.py:298 msgid "already exists" msgstr "已经存在" -#: assets/views/cluster.py:23 +#: assets/views/cluster.py:27 msgid "Cluster list" msgstr "集群列表" -#: assets/views/cluster.py:38 assets/views/cluster.py:65 -#: assets/views/system_user.py:112 +#: assets/views/cluster.py:42 assets/views/cluster.py:70 +#: assets/views/system_user.py:98 msgid "assets" msgstr "资产管理" -#: assets/views/cluster.py:66 +#: assets/views/cluster.py:71 msgid "Update Cluster" msgstr "更新Cluster" -#: assets/views/cluster.py:81 +#: assets/views/cluster.py:86 msgid "Cluster detail" msgstr "集群详情" -#: assets/views/group.py:54 +#: assets/views/group.py:53 msgid "Asset group list" msgstr "资产组列表" -#: assets/views/group.py:72 +#: assets/views/group.py:70 msgid "Asset group detail" msgstr "资产组详情" -#: assets/views/system_user.py:30 +#: assets/views/system_user.py:31 msgid "System user list" msgstr "系统用户列表" -#: assets/views/system_user.py:57 -#, python-brace-format -msgid "Create system user {name} successfully." -msgstr "创建系统用户 {name} 成功" - -#: assets/views/system_user.py:72 +#: assets/views/system_user.py:63 msgid "Update system user" msgstr "更新系统用户" -#: assets/views/system_user.py:92 +#: assets/views/system_user.py:78 msgid "System user detail" msgstr "系统用户详情" -#: assets/views/system_user.py:113 +#: assets/views/system_user.py:99 msgid "System user asset" msgstr "系统用户集群资产" +#: common/const.py:6 +#, python-format +#| msgid "User group {name} was created successfully" +msgid "%(name)s was created successfully" +msgstr "%(name)s 创建成功" + +#: common/const.py:7 +#, python-format +msgid "%(name)s was updated successfully" +msgstr "%(name)s 更新成功" + #: common/mixins.py:29 msgid "is discard" msgstr "" @@ -1517,6 +1539,10 @@ msgstr "成功" msgid "Date" msgstr "日期" +#: ops/templates/ops/task_list.html:125 +msgid "Task start: " +msgstr "任务开始: " + #: ops/views.py:36 ops/views.py:52 ops/views.py:65 ops/views.py:78 #: ops/views.py:91 ops/views.py:104 ops/views.py:117 msgid "Ops" @@ -1544,7 +1570,7 @@ msgstr "选择用户" #: terminal/templates/terminal/session_list.html:33 #: terminal/templates/terminal/session_list.html:71 users/forms.py:187 #: users/models/user.py:31 users/templates/users/user_group_detail.html:78 -#: users/views/user.py:348 +#: users/views/user.py:345 msgid "User" msgstr "用户" @@ -1658,47 +1684,32 @@ msgstr "选择用户" msgid "Add user group to asset permission" msgstr "添加用户组" -#: perms/views.py:27 perms/views.py:77 perms/views.py:103 perms/views.py:128 -#: perms/views.py:165 perms/views.py:195 templates/_nav.html:30 +#: perms/views.py:28 perms/views.py:44 perms/views.py:60 perms/views.py:74 +#: perms/views.py:111 perms/views.py:141 templates/_nav.html:30 msgid "Perms" msgstr "权限管理" -#: perms/views.py:28 +#: perms/views.py:29 msgid "Asset permission list" msgstr "资产授权列表" -#: perms/views.py:63 -#, python-brace-format -msgid "Create asset permission {name} successfully." -msgstr "创建授权 {name} 成功" - -#: perms/views.py:78 +#: perms/views.py:45 msgid "Create asset permission" msgstr "创建权限规则" -#: perms/views.py:89 -#, python-brace-format -msgid "Create asset permission {name} success." -msgstr "创建授权 {name} 成功" - -#: perms/views.py:104 +#: perms/views.py:61 msgid "Update asset permission" msgstr "更新资产授权" -#: perms/views.py:115 -#, python-brace-format -msgid "Update asset permission {name} success." -msgstr "更新授权 {name} 成功" - -#: perms/views.py:129 +#: perms/views.py:75 msgid "Asset permission detail" msgstr "资产授权详情" -#: perms/views.py:166 +#: perms/views.py:112 msgid "Asset permission user list" msgstr "资产授权包含用户" -#: perms/views.py:196 +#: perms/views.py:142 msgid "Asset permission asset list" msgstr "资产组授权包含资产" @@ -1716,32 +1727,28 @@ msgstr "帮助" #: users/templates/users/user_profile.html:17 #: users/templates/users/user_profile_update.html:37 #: users/templates/users/user_profile_update.html:57 -#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:323 +#: users/templates/users/user_pubkey_update.html:37 users/views/user.py:320 msgid "Profile" msgstr "个人信息" -#: templates/_header_bar.html:34 -msgid "Profile settings" -msgstr "个人信息设置" - -#: templates/_header_bar.html:38 +#: templates/_header_bar.html:37 msgid "Admin page" msgstr "管理页面" -#: templates/_header_bar.html:40 +#: templates/_header_bar.html:39 msgid "User page" msgstr "用户页面" -#: templates/_header_bar.html:43 +#: templates/_header_bar.html:42 msgid "Logout" msgstr "注销登录" -#: templates/_header_bar.html:47 users/templates/users/login.html:42 +#: templates/_header_bar.html:46 users/templates/users/login.html:42 #: users/templates/users/login.html:61 msgid "Login" msgstr "登录" -#: templates/_header_bar.html:60 templates/_nav.html:4 +#: templates/_header_bar.html:59 templates/_nav.html:4 msgid "Dashboard" msgstr "仪表盘" @@ -1775,11 +1782,11 @@ msgstr "" msgid "Close" msgstr "关闭" -#: templates/_nav.html:9 users/views/group.py:30 users/views/group.py:48 -#: users/views/group.py:74 users/views/group.py:91 users/views/login.py:193 -#: users/views/login.py:242 users/views/user.py:55 users/views/user.py:70 -#: users/views/user.py:95 users/views/user.py:151 users/views/user.py:308 -#: users/views/user.py:322 users/views/user.py:366 users/views/user.py:388 +#: templates/_nav.html:9 users/views/group.py:28 users/views/group.py:44 +#: users/views/group.py:62 users/views/group.py:79 users/views/login.py:193 +#: users/views/login.py:242 users/views/user.py:57 users/views/user.py:72 +#: users/views/user.py:92 users/views/user.py:148 users/views/user.py:305 +#: users/views/user.py:319 users/views/user.py:363 users/views/user.py:385 msgid "Users" msgstr "用户管理" @@ -2152,7 +2159,7 @@ msgstr "Agent" msgid "Date login" msgstr "登录日期" -#: users/models/user.py:30 users/models/user.py:255 +#: users/models/user.py:30 users/models/user.py:259 msgid "Administrator" msgstr "管理员" @@ -2191,7 +2198,7 @@ msgstr "二次验证" msgid "Public key" msgstr "ssh公钥" -#: users/models/user.py:258 +#: users/models/user.py:262 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" @@ -2293,7 +2300,7 @@ msgid "Setting" msgstr "设置" #: users/templates/users/user_create.html:4 -#: users/templates/users/user_list.html:16 users/views/user.py:70 +#: users/templates/users/user_list.html:16 users/views/user.py:72 msgid "Create user" msgstr "创建用户" @@ -2304,7 +2311,7 @@ msgstr "生成重置密码连接,通过邮件发送给用户" #: users/templates/users/user_detail.html:19 #: users/templates/users/user_granted_asset.html:18 #: users/templates/users/user_group_granted_asset.html:18 -#: users/views/user.py:152 +#: users/views/user.py:149 msgid "User detail" msgstr "用户详情" @@ -2379,11 +2386,11 @@ msgstr "授权资产" msgid "Asset groups granted of " msgstr "授权资产组" -#: users/templates/users/user_group_create_update.html:45 +#: users/templates/users/user_group_create_update.html:31 msgid "Cancel" msgstr "取消" -#: users/templates/users/user_group_detail.html:22 users/views/group.py:92 +#: users/templates/users/user_group_detail.html:22 users/views/group.py:80 msgid "User group detail" msgstr "资产组详情" @@ -2395,7 +2402,7 @@ msgstr "添加用户" msgid "Valid" msgstr "可用" -#: users/templates/users/user_group_list.html:5 users/views/group.py:49 +#: users/templates/users/user_group_list.html:5 users/views/group.py:45 msgid "Create user group" msgstr "创建用户组" @@ -2433,8 +2440,8 @@ msgstr "用户删除失败" msgid "OTP" msgstr "" -#: users/templates/users/user_profile.html:100 users/views/user.py:181 -#: users/views/user.py:233 +#: users/templates/users/user_profile.html:100 users/views/user.py:178 +#: users/views/user.py:230 msgid "User groups" msgstr "用户组" @@ -2458,7 +2465,7 @@ msgstr "指纹" msgid "Update public key" msgstr "更新密钥" -#: users/templates/users/user_update.html:4 users/views/user.py:95 +#: users/templates/users/user_update.html:4 users/views/user.py:92 msgid "Update user" msgstr "编辑用户" @@ -2592,17 +2599,11 @@ msgstr "禁用或失效" msgid "Password or SSH public key invalid" msgstr "密码或秘钥不合法" -#: users/views/group.py:31 +#: users/views/group.py:29 msgid "User group list" msgstr "用户组列表" -#: users/views/group.py:43 -#, fuzzy, python-brace-format -#| msgid "Create user {name} successfully." -msgid "User group {name} was created successfully" -msgstr "创建用户 {name} 成功" - -#: users/views/group.py:75 +#: users/views/group.py:63 msgid "Update user group" msgstr "编辑用户组" @@ -2655,37 +2656,36 @@ msgstr "首次登陆" msgid "Login log list" msgstr "登录日志" -#: users/views/user.py:56 +#: users/views/user.py:58 msgid "User list" msgstr "用户列表" -#: users/views/user.py:66 users/views/user.py:335 +#: users/views/user.py:102 +msgid "Bulk update user success" +msgstr "批量更新用户成功" + +#: users/views/user.py:207 +msgid "Invalid file." +msgstr "文件不合法" + +#: users/views/user.py:306 +msgid "User granted assets" +msgstr "用户授权资产" + +#: users/views/user.py:332 #, python-brace-format msgid "Create user {name} successfully." msgstr "创建用户 {name} 成功" -#: users/views/user.py:105 -msgid "Bulk update user success" -msgstr "批量更新用户成功" - -#: users/views/user.py:210 -msgid "Invalid file." -msgstr "文件不合法" - -#: users/views/user.py:309 -msgid "User granted assets" -msgstr "用户授权资产" - -#: users/views/user.py:349 +#: users/views/user.py:346 msgid "Profile setting" msgstr "个人信息设置" -#: users/views/user.py:367 +#: users/views/user.py:364 msgid "Password update" msgstr "密码更新" -#: users/views/user.py:389 +#: users/views/user.py:386 msgid "Public key update" msgstr "秘钥更新" - diff --git a/apps/perms/views.py b/apps/perms/views.py index d3759d064..6fb2cbca7 100644 --- a/apps/perms/views.py +++ b/apps/perms/views.py @@ -11,6 +11,7 @@ from django.contrib.messages.views import SuccessMessageMixin from django.views.generic.detail import DetailView, SingleObjectMixin from django.contrib import messages +from common.const import create_success_msg, update_success_msg from .hands import AdminUserRequiredMixin, User, UserGroup, SystemUser, \ Asset, AssetGroup from .models import AssetPermission @@ -31,46 +32,12 @@ class AssetPermissionListView(AdminUserRequiredMixin, ListView): return super().get_context_data(**kwargs) -class MessageMixin: - def form_valid(self, form): - response = super().form_valid(form) - errors = self.object.check_system_user_in_assets() - if errors: - message = self.get_warning_messages(errors) - messages.warning(self.request, message) - else: - message = self.get_success_message(form.cleaned_data) - messages.success(self.request, message) - - success_message = self.get_success_message(form.cleaned_data) - if success_message: - messages.success(self.request, success_message) - return response - - @staticmethod - def get_warning_messages(errors): - message = "WARNING: System user " \ - "should in behind clusters, so that " \ - "system user cat auto push to the cluster assets:
" - for system_user, clusters in errors.items(): - message += " >>> {}: {} ".format(system_user.name, ", ".join((cluster.name for cluster in clusters))) - return message - - def get_success_message(self, cleaned_data): - url = reverse_lazy('perms:asset-permission-detail', - kwargs={'pk': self.object.pk}) - success_message = _( - 'Create asset permission {name} ' - 'successfully.'.format(url=url, name=self.object.name)) - return success_message - - class AssetPermissionCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): model = AssetPermission form_class = AssetPermissionForm template_name = 'perms/asset_permission_create_update.html' success_url = reverse_lazy('perms:asset-permission-list') - warning = None + success_message = create_success_msg def get_context_data(self, **kwargs): context = { @@ -80,23 +47,13 @@ class AssetPermissionCreateView(AdminUserRequiredMixin, SuccessMessageMixin, Cre kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_message(self, cleaned_data): - url = reverse_lazy( - 'perms:asset-permission-detail', - kwargs={'pk': self.object.pk} - ) - success_message = _( - 'Create asset permission {name} ' - 'success.'.format(url=url, name=self.object.name) - ) - return success_message - class AssetPermissionUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = AssetPermission form_class = AssetPermissionForm template_name = 'perms/asset_permission_create_update.html' success_url = reverse_lazy("perms:asset-permission-list") + success_message = update_success_msg def get_context_data(self, **kwargs): context = { @@ -106,17 +63,6 @@ class AssetPermissionUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, Upd kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_message(self, cleaned_data): - url = reverse_lazy( - 'perms:asset-permission-detail', - kwargs={'pk': self.object.pk} - ) - success_message = _( - 'Update asset permission {name} ' - 'success.'.format(url=url, name=self.object.name) - ) - return success_message - class AssetPermissionDetailView(AdminUserRequiredMixin, DetailView): template_name = 'perms/asset_permission_detail.html' diff --git a/apps/users/templates/users/user_group_create_update.html b/apps/users/templates/users/user_group_create_update.html index 5c388e668..6baef2a94 100644 --- a/apps/users/templates/users/user_group_create_update.html +++ b/apps/users/templates/users/user_group_create_update.html @@ -25,20 +25,6 @@ {% csrf_token %} {% bootstrap_field form.name layout="horizontal" %} {% bootstrap_field form.users layout="horizontal" %} -{#
#} -{# #} -{#
#} -{# #} -{#
#} -{#
#} {% bootstrap_field form.comment layout="horizontal" %}
@@ -57,7 +43,9 @@ {% block custom_foot_js %} {% endblock %} diff --git a/apps/users/views/group.py b/apps/users/views/group.py index a26cfcaec..4b11e7901 100644 --- a/apps/users/views/group.py +++ b/apps/users/views/group.py @@ -2,17 +2,15 @@ from __future__ import unicode_literals from django import forms -from django.shortcuts import reverse, redirect from django.utils.translation import ugettext as _ from django.urls import reverse_lazy -from django.views.generic import ListView from django.views.generic.base import TemplateView -from django.views.generic.edit import CreateView, UpdateView, FormMixin -from django.views.generic.detail import DetailView, SingleObjectMixin +from django.views.generic.edit import CreateView, UpdateView +from django.views.generic.detail import DetailView from django.contrib.messages.views import SuccessMessageMixin from common.utils import get_logger -from perms.models import AssetPermission +from common.const import create_success_msg, update_success_msg from ..models import User, UserGroup from ..utils import AdminUserRequiredMixin from .. import forms @@ -39,9 +37,7 @@ class UserGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVie form_class = forms.UserGroupForm template_name = 'users/user_group_create_update.html' success_url = reverse_lazy('users:user-group-list') - success_message = _( - 'User group {name} was created successfully' - ) + success_message = create_success_msg def get_context_data(self, **kwargs): context = { @@ -51,21 +47,13 @@ class UserGroupCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVie kwargs.update(context) return super().get_context_data(**kwargs) - def get_success_message(self, cleaned_data): - url = reverse_lazy( - 'users:user-group-detail', - kwargs={'pk': self.object.id} - ) - return self.success_message.format( - url=url, name=self.object.name - ) - -class UserGroupUpdateView(AdminUserRequiredMixin, UpdateView): +class UserGroupUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = UserGroup form_class = forms.UserGroupForm template_name = 'users/user_group_create_update.html' success_url = reverse_lazy('users:user-group-list') + success_message = update_success_msg def get_context_data(self, **kwargs): users = User.objects.all() diff --git a/apps/users/views/user.py b/apps/users/views/user.py index ec54e1d0c..89ed460bb 100644 --- a/apps/users/views/user.py +++ b/apps/users/views/user.py @@ -27,12 +27,14 @@ from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.decorators.csrf import csrf_exempt from django.contrib.auth import logout as auth_logout +from common.const import create_success_msg, update_success_msg +from common.mixins import JSONResponseMixin +from common.utils import get_logger, get_object_or_none, is_uuid from .. import forms from ..models import User, UserGroup from ..utils import AdminUserRequiredMixin from ..signals import on_user_created -from common.mixins import JSONResponseMixin -from common.utils import get_logger, get_object_or_none, is_uuid + __all__ = [ 'UserListView', 'UserCreateView', 'UserDetailView', @@ -63,7 +65,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): form_class = forms.UserCreateUpdateForm template_name = 'users/user_create.html' success_url = reverse_lazy('users:user-list') - success_message = _('Create user {name} successfully.') + success_message = create_success_msg def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -77,19 +79,14 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): on_user_created.send(self.__class__, user=user) return super().form_valid(form) - def get_success_message(self, cleaned_data): - url = reverse_lazy('users:user-detail', kwargs={'pk': self.object.pk}) - return self.success_message.format( - url=url, name=self.object.name - ) - -class UserUpdateView(AdminUserRequiredMixin, UpdateView): +class UserUpdateView(AdminUserRequiredMixin, SuccessMessageMixin, UpdateView): model = User form_class = forms.UserCreateUpdateForm template_name = 'users/user_update.html' context_object_name = 'user_object' success_url = reverse_lazy('users:user-list') + success_message = update_success_msg def get_context_data(self, **kwargs): context = {'app': _('Users'), 'action': _('Update user')}