fix: 优化用户列表接口性能

pull/7687/head
feng626 2022-02-23 14:43:47 +08:00 committed by Jiangjie.Bai
parent 8604b9019f
commit bbf3250161
1 changed files with 14 additions and 7 deletions

View File

@ -23,7 +23,6 @@ from ..models import User
from ..signals import post_user_create
from ..filters import UserFilter
logger = get_logger(__name__)
__all__ = [
'UserViewSet', 'UserChangePasswordApi',
@ -40,7 +39,7 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, BulkModelViewSet):
'invite': InviteSerializer,
}
ordering_fields = ('name',)
ordering = ('name', )
ordering = ('name',)
rbac_perms = {
'suggestion': 'users.match_user',
'invite': 'users.invite_user',
@ -52,6 +51,19 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, BulkModelViewSet):
queryset = super().get_queryset().prefetch_related('groups')
return queryset
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
page = self.set_users_roles_for_cache(page)
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
queryset = self.set_users_roles_for_cache(queryset)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
@staticmethod
def set_users_roles_for_cache(queryset):
# Todo: 未来有机会用 SQL 实现
@ -80,11 +92,6 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, BulkModelViewSet):
u.system_roles.cache_set(system_roles)
return queryset_list
def filter_queryset(self, queryset):
queryset = super().filter_queryset(queryset)
queryset_list = self.set_users_roles_for_cache(queryset)
return queryset_list
def perform_create(self, serializer):
users = serializer.save()
if isinstance(users, User):