mirror of https://github.com/jumpserver/jumpserver
[Update] 修改批量更新资产url过长导致的错误 (#2571)
parent
638ba31694
commit
699b8d9980
|
@ -1,19 +1,25 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import uuid
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework_bulk import BulkModelViewSet
|
from rest_framework_bulk import BulkModelViewSet
|
||||||
from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView
|
from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView
|
||||||
from rest_framework.pagination import LimitOffsetPagination
|
from rest_framework.pagination import LimitOffsetPagination
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.urls import reverse_lazy
|
||||||
|
from django.core.cache import cache
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
from common.mixins import IDInFilterMixin
|
from common.mixins import IDInFilterMixin
|
||||||
from common.utils import get_logger
|
from common.utils import get_logger
|
||||||
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser
|
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser
|
||||||
|
from ..const import CACHE_KEY_ASSET_BULK_UPDATE_ID_PREFIX
|
||||||
from ..models import Asset, AdminUser, Node
|
from ..models import Asset, AdminUser, Node
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
from ..tasks import update_asset_hardware_info_manual, \
|
from ..tasks import update_asset_hardware_info_manual, \
|
||||||
|
@ -25,7 +31,7 @@ logger = get_logger(__file__)
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AssetViewSet', 'AssetListUpdateApi',
|
'AssetViewSet', 'AssetListUpdateApi',
|
||||||
'AssetRefreshHardwareApi', 'AssetAdminUserTestApi',
|
'AssetRefreshHardwareApi', 'AssetAdminUserTestApi',
|
||||||
'AssetGatewayApi'
|
'AssetGatewayApi', 'AssetBulkUpdateSelectAPI'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,6 +98,21 @@ class AssetListUpdateApi(IDInFilterMixin, ListBulkCreateUpdateDestroyAPIView):
|
||||||
permission_classes = (IsOrgAdmin,)
|
permission_classes = (IsOrgAdmin,)
|
||||||
|
|
||||||
|
|
||||||
|
class AssetBulkUpdateSelectAPI(APIView):
|
||||||
|
permission_classes = (IsOrgAdmin,)
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
assets_id = request.data.get('assets_id', '')
|
||||||
|
if assets_id:
|
||||||
|
spm = uuid.uuid4().hex
|
||||||
|
key = CACHE_KEY_ASSET_BULK_UPDATE_ID_PREFIX.format(spm)
|
||||||
|
cache.set(key, assets_id, 300)
|
||||||
|
url = reverse_lazy('assets:asset-bulk-update') + '?spm=%s' % spm
|
||||||
|
return Response({'url': url})
|
||||||
|
error = _('Please select assets that need to be updated')
|
||||||
|
return Response({'error': error}, status=400)
|
||||||
|
|
||||||
|
|
||||||
class AssetRefreshHardwareApi(generics.RetrieveAPIView):
|
class AssetRefreshHardwareApi(generics.RetrieveAPIView):
|
||||||
"""
|
"""
|
||||||
Refresh asset hardware info
|
Refresh asset hardware info
|
||||||
|
|
|
@ -48,3 +48,6 @@ TASK_OPTIONS = {
|
||||||
'timeout': 10,
|
'timeout': 10,
|
||||||
'forks': 10,
|
'forks': 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CACHE_KEY_ASSET_BULK_UPDATE_ID_PREFIX = '_KEY_ASSET_BULK_UPDATE_ID_{}'
|
||||||
|
|
||||||
|
|
|
@ -657,9 +657,23 @@ $(document).ready(function(){
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function doUpdate() {
|
function doUpdate() {
|
||||||
var id_list_string = id_list.join(',');
|
var data = {
|
||||||
var url = "{% url 'assets:asset-bulk-update' %}?assets_id=" + id_list_string;
|
'assets_id':id_list
|
||||||
location.href = url
|
};
|
||||||
|
function error(data) {
|
||||||
|
toastr.error(JSON.parse(data).error)
|
||||||
|
}
|
||||||
|
function success(data) {
|
||||||
|
location.href = data.url;
|
||||||
|
}
|
||||||
|
APIUpdateAttr({
|
||||||
|
'url': "{% url 'api-assets:asset-bulk-update-select' %}",
|
||||||
|
'method': 'POST',
|
||||||
|
'body': JSON.stringify(data),
|
||||||
|
'flash_message': false,
|
||||||
|
'success': success,
|
||||||
|
'error': error,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function doRemove() {
|
function doRemove() {
|
||||||
|
|
|
@ -25,6 +25,8 @@ cmd_filter_router.register(r'rules', api.CommandFilterRuleViewSet, 'cmd-filter-r
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('assets-bulk/', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
|
path('assets-bulk/', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
|
||||||
|
path('asset/update/select/',
|
||||||
|
api.AssetBulkUpdateSelectAPI.as_view(), name='asset-bulk-update-select'),
|
||||||
path('assets/<uuid:pk>/refresh/',
|
path('assets/<uuid:pk>/refresh/',
|
||||||
api.AssetRefreshHardwareApi.as_view(), name='asset-refresh'),
|
api.AssetRefreshHardwareApi.as_view(), name='asset-refresh'),
|
||||||
path('assets/<uuid:pk>/alive/',
|
path('assets/<uuid:pk>/alive/',
|
||||||
|
|
|
@ -28,6 +28,7 @@ from common.mixins import JSONResponseMixin
|
||||||
from common.utils import get_object_or_none, get_logger
|
from common.utils import get_object_or_none, get_logger
|
||||||
from common.permissions import AdminUserRequiredMixin
|
from common.permissions import AdminUserRequiredMixin
|
||||||
from common.const import create_success_msg, update_success_msg
|
from common.const import create_success_msg, update_success_msg
|
||||||
|
from ..const import CACHE_KEY_ASSET_BULK_UPDATE_ID_PREFIX
|
||||||
from orgs.utils import current_org
|
from orgs.utils import current_org
|
||||||
from .. import forms
|
from .. import forms
|
||||||
from ..models import Asset, AdminUser, SystemUser, Label, Node, Domain
|
from ..models import Asset, AdminUser, SystemUser, Label, Node, Domain
|
||||||
|
@ -120,15 +121,12 @@ class AssetBulkUpdateView(AdminUserRequiredMixin, ListView):
|
||||||
form = None
|
form = None
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
assets_id = self.request.GET.get('assets_id', '')
|
spm = request.GET.get('spm', '')
|
||||||
self.id_list = [i for i in assets_id.split(',')]
|
assets_id = cache.get(CACHE_KEY_ASSET_BULK_UPDATE_ID_PREFIX.format(spm))
|
||||||
|
|
||||||
if kwargs.get('form'):
|
if kwargs.get('form'):
|
||||||
self.form = kwargs['form']
|
self.form = kwargs['form']
|
||||||
elif assets_id:
|
elif assets_id:
|
||||||
self.form = self.form_class(
|
self.form = self.form_class(initial={'assets': assets_id})
|
||||||
initial={'assets': self.id_list}
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
self.form = self.form_class()
|
self.form = self.form_class()
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue