From 9a92e24e505a4cd06bc51b35f977c905c34baabb Mon Sep 17 00:00:00 2001 From: "fghbng@qq.com" Date: Thu, 29 Apr 2021 19:10:45 +0800 Subject: [PATCH] =?UTF-8?q?serializer=E4=BC=98=E5=8C=96&&=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E5=AF=BC=E5=85=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/serializers/login_acl.py | 11 +++- apps/acls/serializers/login_asset_acl.py | 12 ++-- apps/applications/serializers/application.py | 10 +++- apps/assets/serializers/admin_user.py | 10 +++- apps/assets/serializers/asset_user.py | 21 ++++--- apps/assets/serializers/cmd_filter.py | 16 ++++-- apps/assets/serializers/domain.py | 15 +++-- apps/assets/serializers/gathered_user.py | 11 ++-- apps/assets/serializers/label.py | 11 +++- apps/assets/serializers/system_user.py | 57 ++++++++++--------- apps/audits/serializers.py | 36 +++++++----- apps/ops/serializers/adhoc.py | 54 ++++++++++++------ apps/orgs/serializers.py | 13 ++++- .../serializers/application/permission.py | 8 +-- apps/perms/serializers/asset/permission.py | 11 ++-- apps/terminal/serializers/session.py | 15 +++-- apps/terminal/serializers/terminal.py | 25 +++++--- apps/tickets/serializers/comment.py | 8 ++- apps/tickets/serializers/ticket/ticket.py | 16 +++--- apps/users/serializers/user.py | 33 +++++++---- 20 files changed, 252 insertions(+), 141 deletions(-) diff --git a/apps/acls/serializers/login_acl.py b/apps/acls/serializers/login_acl.py index ee1a5ac25..b303db533 100644 --- a/apps/acls/serializers/login_acl.py +++ b/apps/acls/serializers/login_acl.py @@ -35,10 +35,15 @@ class LoginACLSerializer(BulkModelSerializer): class Meta: model = LoginACL - fields = [ - 'id', 'name', 'priority', 'ip_group', 'user', 'user_display', 'action', - 'action_display', 'is_active', 'comment', 'created_by', 'date_created', 'date_updated' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'priority', 'ip_group', 'action', 'action_display', + 'is_active', + 'date_created', 'date_updated', + 'comment', 'created_by', ] + fields_fk = ['user', 'user_display',] + fields = fields_small + fields_fk extra_kwargs = { 'priority': {'default': 50}, 'is_active': {'default': True}, diff --git a/apps/acls/serializers/login_asset_acl.py b/apps/acls/serializers/login_asset_acl.py index f451a912a..bbb31af94 100644 --- a/apps/acls/serializers/login_asset_acl.py +++ b/apps/acls/serializers/login_asset_acl.py @@ -76,11 +76,15 @@ class LoginAssetACLSerializer(BulkOrgResourceModelSerializer): class Meta: model = models.LoginAssetACL - fields = [ - 'id', 'name', 'priority', 'users', 'system_users', 'assets', 'action', 'action_display', - 'is_active', 'comment', 'reviewers', 'reviewers_amount', 'created_by', 'date_created', - 'date_updated', 'org_id' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'users', 'system_users', 'assets', + 'is_active', + 'date_created', 'date_updated', + 'priority', 'action', 'action_display', 'comment', 'created_by', 'org_id' ] + fields_m2m = ['reviewers', 'reviewers_amount'] + fields = fields_small + fields_m2m extra_kwargs = { "reviewers": {'allow_null': False, 'required': True}, 'priority': {'default': 50}, diff --git a/apps/applications/serializers/application.py b/apps/applications/serializers/application.py index 580ce9a12..bff8c270a 100644 --- a/apps/applications/serializers/application.py +++ b/apps/applications/serializers/application.py @@ -49,10 +49,14 @@ class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSeri class Meta: model = models.Application - fields = [ - 'id', 'name', 'category', 'category_display', 'type', 'type_display', 'attrs', - 'domain', 'created_by', 'date_created', 'date_updated', 'comment' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'category', 'category_display', 'type', 'type_display', 'attrs', + 'date_created', 'date_updated', + 'created_by', 'comment' ] + fields_fk = ['domain'] + fields = fields_small + fields_fk read_only_fields = [ 'created_by', 'date_created', 'date_updated', 'get_type_display', ] diff --git a/apps/assets/serializers/admin_user.py b/apps/assets/serializers/admin_user.py index 0211d88cc..2e1913b47 100644 --- a/apps/assets/serializers/admin_user.py +++ b/apps/assets/serializers/admin_user.py @@ -16,10 +16,14 @@ class AdminUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): class Meta: model = AdminUser - fields = [ - 'id', 'name', 'username', 'password', 'private_key', 'public_key', - 'comment', 'assets_amount', 'date_created', 'date_updated', 'created_by', + fields_mini = ['id', 'name', 'username'] + fields_write_only = ['password', 'private_key', 'public_key'] + fields_small = fields_mini + fields_write_only + [ + 'date_created', 'date_updated', + 'comment', 'created_by' ] + fields_fk = ['assets_amount'] + fields = fields_small + fields_fk read_only_fields = ['date_created', 'date_updated', 'created_by', 'assets_amount'] extra_kwargs = { diff --git a/apps/assets/serializers/asset_user.py b/apps/assets/serializers/asset_user.py index 7eba6ba41..19cb2adc7 100644 --- a/apps/assets/serializers/asset_user.py +++ b/apps/assets/serializers/asset_user.py @@ -22,10 +22,11 @@ class AssetUserWriteSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializ class Meta: model = AuthBook list_serializer_class = AdaptedBulkListSerializer - fields = [ - 'id', 'username', 'password', 'private_key', "public_key", - 'asset', 'comment', - ] + fields_mini = ['id', 'username'] + fields_write_only = ['password', 'private_key', "public_key"] + fields_small = fields_mini + fields_write_only + ['comment'] + fields_fk = ['asset'] + fields = fields_small + fields_fk extra_kwargs = { 'username': {'required': True}, 'password': {'write_only': True}, @@ -52,11 +53,15 @@ class AssetUserReadSerializer(AssetUserWriteSerializer): 'date_created', 'date_updated', 'created_by', 'version', ) - fields = [ - 'id', 'username', 'password', 'private_key', "public_key", - 'asset', 'hostname', 'ip', 'backend', 'version', - 'date_created', "date_updated", 'comment', + fields_mini = ['id', 'username'] + fields_write_only = ['password', 'private_key', "public_key"] + fields_small = fields_mini + fields_write_only + [ + 'backend', 'version', + 'date_created', "date_updated", + 'comment' ] + fields_fk = ['asset', 'hostname', 'ip'] + fields = fields_small + fields_fk extra_kwargs = { 'username': {'required': True}, 'password': {'write_only': True}, diff --git a/apps/assets/serializers/cmd_filter.py b/apps/assets/serializers/cmd_filter.py index 2e60b31d7..052452825 100644 --- a/apps/assets/serializers/cmd_filter.py +++ b/apps/assets/serializers/cmd_filter.py @@ -16,11 +16,16 @@ class CommandFilterSerializer(BulkOrgResourceModelSerializer): class Meta: model = CommandFilter list_serializer_class = AdaptedBulkListSerializer - fields = [ - 'id', 'name', 'org_id', 'org_name', 'is_active', 'comment', - 'created_by', 'date_created', 'date_updated', 'rules', 'system_users' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'org_id', 'org_name', + 'is_active', + 'date_created', 'date_updated', + 'comment', 'created_by', ] - + fields_fk = ['rules'] + fields_m2m = ['system_users'] + fields = fields_small + fields_fk + fields_m2m extra_kwargs = { 'rules': {'read_only': True}, 'system_users': {'required': False}, @@ -38,7 +43,8 @@ class CommandFilterRuleSerializer(BulkOrgResourceModelSerializer): fields_small = fields_mini + [ 'type', 'type_display', 'content', 'priority', 'action', 'action_display', 'reviewers', - 'comment', 'created_by', 'date_created', 'date_updated' + 'date_created', 'date_updated', + 'comment', 'created_by', ] fields_fk = ['filter'] fields = '__all__' diff --git a/apps/assets/serializers/domain.py b/apps/assets/serializers/domain.py index f7b402f0e..5f0a44ec2 100644 --- a/apps/assets/serializers/domain.py +++ b/apps/assets/serializers/domain.py @@ -48,11 +48,18 @@ class GatewaySerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): class Meta: model = Gateway list_serializer_class = AdaptedBulkListSerializer - fields = [ - 'id', 'name', 'ip', 'port', 'protocol', 'username', 'password', - 'private_key', 'public_key', 'domain', 'is_active', 'date_created', - 'date_updated', 'created_by', 'comment', + fields_mini = ['id', 'name'] + fields_write_only = [ + 'password', 'private_key', 'public_key', ] + fields_small = fields_mini + fields_write_only + [ + 'username', 'ip', 'port', 'protocol', + 'is_active', + 'date_created', 'date_updated', + 'created_by', 'comment', + ] + fields_fk = ['domain'] + fields = fields_small + fields_fk extra_kwargs = { 'password': {'validators': [NoSpecialChars()]} } diff --git a/apps/assets/serializers/gathered_user.py b/apps/assets/serializers/gathered_user.py index 2629a8327..86e7dcfae 100644 --- a/apps/assets/serializers/gathered_user.py +++ b/apps/assets/serializers/gathered_user.py @@ -10,11 +10,14 @@ from ..models import GatheredUser class GatheredUserSerializer(OrgResourceModelSerializerMixin): class Meta: model = GatheredUser - fields = [ - 'id', 'asset', 'hostname', 'ip', 'username', - 'date_last_login', 'ip_last_login', - 'present', 'date_created', 'date_updated' + fields_mini = ['id'] + fields_small = fields_mini + [ + 'username', 'ip_last_login', + 'present', + 'date_last_login', 'date_created', 'date_updated' ] + fields_fk = ['asset', 'hostname', 'ip'] + fields = fields_small + fields_fk read_only_fields = fields extra_kwargs = { 'hostname': {'label': _("Hostname")}, diff --git a/apps/assets/serializers/label.py b/apps/assets/serializers/label.py index a98d4757d..f922655ef 100644 --- a/apps/assets/serializers/label.py +++ b/apps/assets/serializers/label.py @@ -15,10 +15,15 @@ class LabelSerializer(BulkOrgResourceModelSerializer): class Meta: model = Label - fields = [ - 'id', 'name', 'value', 'category', 'is_active', 'comment', - 'date_created', 'asset_count', 'assets', 'category_display' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'value', 'category', 'category_display', + 'is_active', + 'date_created', + 'comment', ] + fields_m2m = ['asset_count', 'assets'] + fields = fields_small + fields_m2m read_only_fields = ( 'category', 'date_created', 'asset_count', ) diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py index 1b3b5de5c..e1ada114d 100644 --- a/apps/assets/serializers/system_user.py +++ b/apps/assets/serializers/system_user.py @@ -26,16 +26,18 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): class Meta: model = SystemUser list_serializer_class = AdaptedBulkListSerializer - fields = [ - 'id', 'name', 'username', 'protocol', - 'password', 'public_key', 'private_key', - 'login_mode', 'login_mode_display', - 'priority', 'username_same_with_user', - 'auto_push', 'cmd_filters', 'sudo', 'shell', 'comment', - 'auto_generate_key', 'sftp_root', 'token', - 'assets_amount', 'date_created', 'date_updated', 'created_by', - 'home', 'system_groups', 'ad_domain' + fields_mini = ['id', 'name', 'username'] + fields_write_only = ['password', 'public_key', 'private_key'] + fields_small = fields_mini + fields_write_only + [ + 'protocol', 'login_mode', 'login_mode_display', 'priority', + 'sudo', 'shell', 'sftp_root', 'token', + 'home', 'system_groups', 'ad_domain', + 'username_same_with_user', 'auto_push', 'auto_generate_key', + 'date_created', 'date_updated', + 'comment', 'created_by', ] + fields_m2m = [ 'cmd_filters', 'assets_amount'] + fields = fields_small + fields_m2m extra_kwargs = { 'password': {"write_only": True}, 'public_key': {"write_only": True}, @@ -147,17 +149,18 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): class SystemUserListSerializer(SystemUserSerializer): class Meta(SystemUserSerializer.Meta): - fields = [ - 'id', 'name', 'username', 'protocol', - 'password', 'public_key', 'private_key', - 'login_mode', 'login_mode_display', - 'priority', "username_same_with_user", - 'auto_push', 'sudo', 'shell', 'comment', - "assets_amount", 'home', 'system_groups', - 'auto_generate_key', 'ad_domain', - 'sftp_root', 'created_by', 'date_created', - 'date_updated', + fields_mini = ['id', 'name', 'username'] + fields_write_only = ['password', 'public_key', 'private_key'] + fields_small = fields_mini + fields_write_only + [ + 'protocol', 'login_mode', 'login_mode_display', 'priority', + 'sudo', 'shell', 'home', 'system_groups', + 'ad_domain', 'sftp_root', + "username_same_with_user", 'auto_push', 'auto_generate_key', + 'date_created', 'date_updated', + 'comment', 'created_by', ] + fields_m2m = ["assets_amount",] + fields = fields_small + fields_m2m extra_kwargs = { 'password': {"write_only": True}, 'public_key': {"write_only": True}, @@ -178,15 +181,15 @@ class SystemUserListSerializer(SystemUserSerializer): class SystemUserWithAuthInfoSerializer(SystemUserSerializer): class Meta(SystemUserSerializer.Meta): - fields = [ - 'id', 'name', 'username', 'protocol', - 'password', 'public_key', 'private_key', - 'login_mode', 'login_mode_display', - 'priority', 'username_same_with_user', - 'auto_push', 'sudo', 'shell', 'comment', - 'auto_generate_key', 'sftp_root', 'token', - 'ad_domain', + fields_mini = ['id', 'name', 'username'] + fields_write_only = ['password', 'public_key', 'private_key'] + fields_small = fields_mini + fields_write_only + [ + 'protocol', 'login_mode', 'login_mode_display', 'priority', + 'sudo', 'shell', 'ad_domain', 'sftp_root', 'token', + "username_same_with_user", 'auto_push', 'auto_generate_key', + 'comment', ] + fields = fields_small extra_kwargs = { 'nodes_amount': {'label': _('Node')}, 'assets_amount': {'label': _('Asset')}, diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py index 74eebbecc..d7ab3e996 100644 --- a/apps/audits/serializers.py +++ b/apps/audits/serializers.py @@ -16,10 +16,14 @@ class FTPLogSerializer(serializers.ModelSerializer): class Meta: model = models.FTPLog - fields = ( - 'id', 'user', 'remote_addr', 'asset', 'system_user', 'org_id', - 'operate', 'filename', 'is_success', 'date_start', 'operate_display' - ) + fields_mini = ['id'] + fields_small = fields_mini + [ + 'user', 'remote_addr', 'asset', 'system_user', 'org_id', + 'operate', 'filename', 'operate_display', + 'is_success', + 'date_start', + ] + fields = fields_small class UserLoginLogSerializer(serializers.ModelSerializer): @@ -29,11 +33,14 @@ class UserLoginLogSerializer(serializers.ModelSerializer): class Meta: model = models.UserLoginLog - fields = ( - 'id', 'username', 'type', 'type_display', 'ip', 'city', 'user_agent', - 'mfa', 'reason', 'status', 'status_display', 'datetime', 'mfa_display', - 'backend' - ) + fields_mini = ['id'] + fields_small = fields_mini + [ + 'username', 'type', 'type_display', 'ip', 'city', 'user_agent', + 'mfa', 'mfa_display', 'reason', 'backend', + 'status', 'status_display', + 'datetime', + ] + fields = fields_small extra_kwargs = { "user_agent": {'label': _('User agent')} } @@ -42,10 +49,13 @@ class UserLoginLogSerializer(serializers.ModelSerializer): class OperateLogSerializer(serializers.ModelSerializer): class Meta: model = models.OperateLog - fields = ( - 'id', 'user', 'action', 'resource_type', 'resource', - 'remote_addr', 'datetime', 'org_id' - ) + fields_mini = ['id'] + fields_small = fields_mini + [ + 'user', 'action', 'resource_type', 'resource', 'remote_addr', + 'datetime', + 'org_id' + ] + fields = fields_small class PasswordChangeLogSerializer(serializers.ModelSerializer): diff --git a/apps/ops/serializers/adhoc.py b/apps/ops/serializers/adhoc.py index 9327ce0a8..badbed2b4 100644 --- a/apps/ops/serializers/adhoc.py +++ b/apps/ops/serializers/adhoc.py @@ -14,11 +14,15 @@ class AdHocExecutionSerializer(serializers.ModelSerializer): class Meta: model = AdHocExecution - fields = [ - 'id', 'task', 'task_display', 'hosts_amount', 'adhoc', 'date_start', 'stat', - 'date_finished', 'timedelta', 'is_finished', 'is_success', 'result', 'summary', - 'short_id', 'adhoc_short_id', 'last_success', 'last_failure' + fields_mini = ['id'] + fields_small = fields_mini + [ + 'hosts_amount', 'timedelta', 'result', 'summary', 'short_id', + 'is_finished', 'is_success', + 'date_start', 'date_finished', ] + fields_fk = ['task', 'task_display', 'adhoc', 'adhoc_short_id',] + fields_custom = ['stat', 'last_success', 'last_failure'] + fields = fields_small + fields_fk + fields_custom @staticmethod def get_task(obj): @@ -52,11 +56,16 @@ class TaskSerializer(BulkOrgResourceModelSerializer): class Meta: model = Task - fields = [ - 'id', 'name', 'interval', 'crontab', 'is_periodic', - 'is_deleted', 'comment', 'date_created', - 'date_updated', 'latest_execution', 'summary', + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'interval', 'crontab', + 'is_periodic', 'is_deleted', + 'date_created', 'date_updated', + 'comment', ] + fields_fk = ['latest_execution'] + fields_custom = ['summary'] + fields = fields_small + fields_fk + fields_custom read_only_fields = [ 'is_deleted', 'date_created', 'date_updated', 'latest_adhoc', 'latest_execution', 'total_run_amount', @@ -77,12 +86,16 @@ class AdHocSerializer(serializers.ModelSerializer): class Meta: model = AdHoc - fields = [ - "id", "task", 'tasks', "pattern", "options", - "hosts", "run_as_admin", "run_as", "become", - "date_created", "short_id", - "become_display", + fields_mini = ['id'] + fields_small = fields_mini + [ + 'tasks', "pattern", "options", "run_as", + "become", "become_display", "short_id", + "run_as_admin", + "date_created", ] + fields_fk = ["task"] + fields_m2m = ["hosts"] + fields = fields_small + fields_fk + fields_m2m read_only_fields = [ 'date_created' ] @@ -99,8 +112,8 @@ class AdHocExecutionNestSerializer(serializers.ModelSerializer): class Meta: model = AdHocExecution fields = ( - 'last_success', 'last_failure', 'last_run', 'timedelta', 'is_finished', - 'is_success' + 'last_success', 'last_failure', 'last_run', 'timedelta', + 'is_finished', 'is_success' ) @@ -120,10 +133,15 @@ class CommandExecutionSerializer(serializers.ModelSerializer): class Meta: model = CommandExecution - fields = [ - 'id', 'hosts', 'run_as', 'command', 'result', 'log_url', - 'is_finished', 'date_created', 'date_finished' + fields_mini = ['id'] + fields_small = fields_mini + [ + 'command', 'result', 'log_url', + 'is_finished', + 'date_created', 'date_finished' ] + fields_fk = ['run_as'] + fields_m2m = ['hosts'] + fields = fields_small + fields_fk + fields_m2m read_only_fields = [ 'result', 'is_finished', 'log_url', 'date_created', 'date_finished' diff --git a/apps/orgs/serializers.py b/apps/orgs/serializers.py index 482c622e1..1a6aca0b0 100644 --- a/apps/orgs/serializers.py +++ b/apps/orgs/serializers.py @@ -38,8 +38,10 @@ class OrgSerializer(ModelSerializer): list_serializer_class = AdaptedBulkListSerializer fields_mini = ['id', 'name'] fields_small = fields_mini + [ - 'is_default', 'is_root', 'comment', - 'created_by', 'date_created', 'resource_statistics' + 'resource_statistics', + 'is_default', 'is_root', + 'date_created', + 'comment', 'created_by', ] fields_m2m = ['users', 'admins', 'auditors'] @@ -79,7 +81,12 @@ class OrgMemberSerializer(BulkModelSerializer): class Meta: model = OrganizationMember - fields = ('id', 'org', 'user', 'role', 'org_display', 'user_display', 'role_display') + fields_mini = ['id'] + fields_small = fields_mini + [ + 'role', 'role_display' + ] + fields_fk = ['org', 'user', 'org_display', 'user_display',] + fields = fields_small + fields_fk use_model_bulk_create = True model_bulk_create_kwargs = {'ignore_conflicts': True} diff --git a/apps/perms/serializers/application/permission.py b/apps/perms/serializers/application/permission.py index 7be6ec9ca..ce820b858 100644 --- a/apps/perms/serializers/application/permission.py +++ b/apps/perms/serializers/application/permission.py @@ -20,16 +20,16 @@ class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer): class Meta: model = ApplicationPermission - mini_fields = ['id', 'name'] - small_fields = mini_fields + [ + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ 'category', 'category_display', 'type', 'type_display', 'is_active', 'is_expired', 'is_valid', 'created_by', 'date_created', 'date_expired', 'date_start', 'comment' ] - m2m_fields = [ + fields_m2m = [ 'users', 'user_groups', 'applications', 'system_users', 'users_amount', 'user_groups_amount', 'applications_amount', 'system_users_amount', ] - fields = small_fields + m2m_fields + fields = fields_small + fields_m2m read_only_fields = ['created_by', 'date_created'] @classmethod diff --git a/apps/perms/serializers/asset/permission.py b/apps/perms/serializers/asset/permission.py index 67a42af4c..c553663e4 100644 --- a/apps/perms/serializers/asset/permission.py +++ b/apps/perms/serializers/asset/permission.py @@ -3,8 +3,10 @@ from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ + from django.db.models import Prefetch, Q + from orgs.mixins.serializers import BulkOrgResourceModelSerializer from perms.models import AssetPermission, Action from assets.models import Asset, Node, SystemUser @@ -95,18 +97,18 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): users_to_set = User.objects.filter( Q(name__in=kwargs.get('users_display')) | Q(username__in=kwargs.get('users_display')) ).distinct() - instance.users.set(users_to_set) + instance.users.add(users_to_set) # 用户组 user_groups_to_set = UserGroup.objects.filter(name__in=kwargs.get('user_groups_display')).distinct() - instance.user_groups.set(user_groups_to_set) + instance.user_groups.add(user_groups_to_set) # 资产 assets_to_set = Asset.objects.filter( Q(ip__in=kwargs.get('assets_display')) | Q(hostname__in=kwargs.get('assets_display')) ).distinct() - instance.assets.set(assets_to_set) + instance.assets.add(assets_to_set) # 节点 nodes_to_set = Node.objects.filter(full_value__in=kwargs.get('nodes_display')).distinct() - instance.nodes.set(nodes_to_set) + instance.nodes.add(nodes_to_set) def create(self, validated_data): display = { @@ -118,3 +120,4 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): instance = super().create(validated_data) self.perform_display_create(instance, **display) return instance + diff --git a/apps/terminal/serializers/session.py b/apps/terminal/serializers/session.py index d66c3cfa3..854bfd240 100644 --- a/apps/terminal/serializers/session.py +++ b/apps/terminal/serializers/session.py @@ -17,14 +17,17 @@ class SessionSerializer(BulkOrgResourceModelSerializer): class Meta: model = Session list_serializer_class = AdaptedBulkListSerializer - fields = [ - "id", "user", "asset", "system_user", + fields_mini = ["id"] + fields_small = fields_mini + [ + "user", "asset", "system_user", "user_id", "asset_id", "system_user_id", - "login_from", "login_from_display", "remote_addr", - "is_success", "is_finished", "has_replay", "can_replay", - "can_join", "can_terminate", "protocol", "date_start", "date_end", - "terminal", + "login_from", "login_from_display", "remote_addr", "protocol", + "is_success", "is_finished", "has_replay", + "date_start", "date_end", ] + fields_fk = ["terminal",] + fields_custom = ["can_replay", "can_join", "can_terminate",] + fields = fields_small + fields_fk + fields_custom extra_kwargs = { "protocol": {'label': _('Protocol')}, 'user_id': {'label': _('User ID')}, diff --git a/apps/terminal/serializers/terminal.py b/apps/terminal/serializers/terminal.py index 25b72ab2c..e4640e454 100644 --- a/apps/terminal/serializers/terminal.py +++ b/apps/terminal/serializers/terminal.py @@ -17,12 +17,15 @@ class StatusSerializer(serializers.ModelSerializer): ) class Meta: - fields = [ - 'id', + fields_mini = ['id'] + fields_write_only = ['sessions',] + fields_small = fields_mini + fields_write_only + [ 'cpu_load', 'memory_used', 'disk_used', - 'session_online', 'sessions', - 'terminal', 'date_created', + 'session_online', + 'date_created' ] + fields_fk = ['terminal'] + fields = fields_small + fields_fk extra_kwargs = { "cpu_load": {'default': 0}, "memory_used": {'default': 0}, @@ -40,12 +43,16 @@ class TerminalSerializer(BulkModelSerializer): class Meta: model = Terminal - fields = [ - 'id', 'name', 'type', 'remote_addr', 'http_port', 'ssh_port', - 'comment', 'is_accepted', "is_active", 'session_online', - 'is_alive', 'date_created', 'command_storage', 'replay_storage', - 'status', 'status_display', 'stat' + fields_mini = ['id', 'name'] + fields_small = fields_mini + [ + 'type', 'remote_addr', 'http_port', 'ssh_port', + 'session_online', 'command_storage', 'replay_storage', + 'is_accepted', "is_active", 'is_alive', + 'date_created', + 'comment', ] + fields_fk = ['status', 'status_display', 'stat'] + fields = fields_small + fields_fk read_only_fields = ['type', 'date_created'] @staticmethod diff --git a/apps/tickets/serializers/comment.py b/apps/tickets/serializers/comment.py index 4eaf49cf7..5bf57180e 100644 --- a/apps/tickets/serializers/comment.py +++ b/apps/tickets/serializers/comment.py @@ -21,9 +21,13 @@ class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment - fields = [ - 'id', 'ticket', 'body', 'user', 'user_display', 'date_created', 'date_updated' + fields_mini = ['id'] + fields_small = fields_mini + [ + 'body', 'user_display', + 'date_created', 'date_updated' ] + fields_fk = ['ticket', 'user',] + fields = fields_small + fields_fk read_only_fields = [ 'user_display', 'date_created', 'date_updated' ] diff --git a/apps/tickets/serializers/ticket/ticket.py b/apps/tickets/serializers/ticket/ticket.py index fd776caea..fdf281b73 100644 --- a/apps/tickets/serializers/ticket/ticket.py +++ b/apps/tickets/serializers/ticket/ticket.py @@ -27,15 +27,17 @@ class TicketSerializer(OrgResourceModelSerializerMixin): class Meta: model = Ticket - fields = [ - 'id', 'title', 'type', 'type_display', - 'meta', 'action', 'action_display', 'status', 'status_display', - 'applicant', 'applicant_display', 'processor', 'processor_display', - 'assignees', 'assignees_display', 'comment', + fields_mini = ['id', 'title'] + fields_small = fields_mini + [ + 'type', 'type_display', 'meta', 'body', + 'action', 'action_display', 'status', 'status_display', + 'applicant_display', 'processor_display', 'assignees_display', 'date_created', 'date_updated', - 'org_id', 'org_name', - 'body' + 'comment', 'org_id', 'org_name', ] + fields_fk = ['applicant', 'processor',] + fields_m2m = ['assignees'] + fields = fields_small + fields_fk + fields_m2m def get_meta_serializer(self): default_serializer = serializers.Serializer(read_only=True) diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index d7b535880..eeadcaa2d 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -44,24 +44,35 @@ class UserSerializer(CommonBulkSerializerMixin, serializers.ModelSerializer): model = User # mini 是指能识别对象的最小单元 fields_mini = ['id', 'name', 'username'] + # 只能写的字段, 这个虽然无法在框架上生效,但是更多对我们是提醒 + fields_write_only = [ + 'password', 'public_key', + ] # small 指的是 不需要计算的直接能从一张表中获取到的数据 - fields_small = fields_mini + [ - 'password', 'email', 'public_key', 'wechat', 'phone', 'mfa_level', 'mfa_enabled', - 'mfa_level_display', 'mfa_force_enabled', 'role_display', 'org_role_display', - 'total_role_display', 'comment', 'source', 'is_valid', 'is_expired', - 'is_active', 'created_by', 'is_first_login', 'can_public_key_auth', - 'password_strategy', 'date_password_last_updated', 'date_expired', - 'avatar_url', 'source_display', 'date_joined', 'last_login', 'need_update_password' + fields_small = fields_mini + fields_write_only + [ + 'email', 'wechat', 'phone', 'mfa_level', + 'source', 'source_display', + 'mfa_enabled', 'is_valid', 'is_expired', 'is_active', # 布尔字段 + 'date_expired', 'date_joined', 'last_login', # 日期字段 + 'created_by', 'comment', # 通用字段 ] - fields = fields_small + [ - 'groups', 'role', 'groups_display', 'role_display', - 'can_update', 'can_delete', 'login_blocked', 'org_roles' + # 包含不太常用的字段,可以没有 + fields_verbose = fields_small + [ + 'total_role_display', 'org_role_display', + 'mfa_level_display', 'mfa_force_enabled', 'is_first_login', + 'date_password_last_updated', 'avatar_url', ] + # 外键的字段 + fields_fk = ['role', 'role_display'] + # 多对多字段 + fields_m2m = ['groups', 'groups_display', 'org_roles'] + # 在serializer 上定义的字段 + fields_custom = ['can_update', 'can_delete', 'login_blocked', 'password_strategy'] + fields = fields_verbose + fields_fk + fields_m2m + fields_custom read_only_fields = [ 'date_joined', 'last_login', 'created_by', 'is_first_login', ] - extra_kwargs = { 'password': {'write_only': True, 'required': False, 'allow_null': True, 'allow_blank': True}, 'public_key': {'write_only': True},