【Django】【序列化】字段的序列化

这里以学生为例,列举了基本的CURD和其他的功能

1、功能的序列化

需要以这个数据为中心找到其所对应的主要功能;如:增、删、改、查、其他

class StudentSerializer(CustomModelSerializer):
	"""核心类"""
	# 注意创建和更新共同点较多,继承了同一个类;
	# 同时批量导入的功能属于批量新增,所以也要继承这个类
class StudentCreateSerializer(StudentSerializer):
	"""创建"""
# class StudentDeleteSerializer(CustomModelSerializer):
	# """删除"""
	# 可以没有删除的序列化,删除的序列化属于更新这一个内容
class StudentUpdateSerializer(StudentSerializer):
	"""更新"""
class StudentReadSerializer(CustomModelSerializer):
	"""查询"""
class StudentExportSerializer(CustomModelSerializer):
	"""其他功能:导出"""
class StudentImportSerializer(StudentSerializer):
	"""其他功能:导入"""

2、填写字段

一、序列化器中的类属性字段

序列化中所定义的类属性字段,一般情况下与模型类字段相对应
默认情况下,这些类属性字段既可以进行序列化输出,也可以进行反序列化输入
不需要输入(反序列化)、输出(序列化)的字段,则不需要定义
只需要反序列化输入,则定义write_only = True
只需要序列化输出,则定义read_only = True
响应的参数如果是多个查询集,需要在JsonResponse()中传参many=True

二、类属性字段的参数

1.通用参数

read_only = True:当前字段只能进行序列化输出(用于不需要反序列化输入的字段)
write_only = True:当前字段只能进行反序列化输入,不进行序列化输出
required = True:在反序列化时是必填字段,默认为True
allow_null = False:当前字段是否允许传None,默认是False(必填字段False,反之则True)
allow_blank = False:当前字段是否运行为空,默认是False(必填字段False,反之则True)
default = xx:指定在反序列化时,当前字段没值时所使用的默认值
validators=校验器:当前字段所使用的校验器(下面介绍常用的)
error_messages:包含错误key-value的字段(下面会举例)
label:当前字段在前端的api页面中所显示的字段名称

2.选项参数

max_length:字段最大长度
min_length:字段最小长度
trim_whitespace:是否截断空字符串
max_value:字段最大值
min_value:字段最小值

三、反序列化_校验机制

调用序列化器对象的is_valid()方法,校验前端参数的正确性,不调用则不校验
校验成功返回True、校验失败返回False
is_valid(raise_exception = True):校验失败后,则抛出异常
当调用is_valid()之后,才能调用序列化器对象的errors属性,内容为校验的错误提示(dict)
在views.py中,如果传参进行了输入反序列化的话,那么需要调用的是经过校验后的数据,比如说新增数据,应该是:xxx类.objects.create(**serializer.validated_data)
   try:
        # 不符合规则则抛出错误
        serializer.is_valid(raise_exception=True)  
    except Exception as e:
        # 返回序列化器原有的dict类型的错误信息
        return JsonResponse(serializer.errors)

四、rest_framework的校验器(用于validators=校验器)

rest_framework.framework中有有多个验证器,这里用其中一个最常见的UniqueValidator唯一验证器示例,更多见:https://juejin.im/post/5aa93246518825555c1d5bba

UniqueValidator唯一校验器
该验证器可用于在模型字段上强制实施 unique=True 约束。它需要一个必需的参数和一个可选的 messages 参数:
1.queryset 必须 - 这是校验唯一性的查询集,一般是模型类.objects.all()
2.message - 校验失败时使用的错误消息
3.lookup - 用于查找已校验值的现有实例。默认为 'exact'

例子:修改之前的serializer.py,对name字段使用UniqueValidator唯一校验器
class StudentSerializer(CustomModelSerializer):
	"""
    该验证器可用于在模型字段上强制实施 unique=True 约束。它需要一个必需的参数和一个可选的 messages 参数:
                    queryset 必须 - 这是验证唯一性的查询集。
                    message - 验证失败时使用的错误消息。
                    lookup - 用于查找已验证值的现有实例。默认为 'exact'
    """
    name = serializers.CharField(label='用户名', max_length=128, min_length = 10, help_text='用户名',
                                 validators=[
                                     UniqueValidator(
                                         queryset=User.objects.all(),
                                         message="该用户名已存在"
                                     )
                                 ],
                                        error_messages = {
                                            ## 键值对,对应上面的限制条件,以及对应的提示
                                            "max_length":"最长128个字符",
                                            "min_length ":"最短10个字符"
                                        }
)
    password = serializers.CharField(label='账号密码', max_length=256, help_text='账号密码', )
    email = serializers.EmailField(label='账号密码', max_length=128, help_text='账号密码',
                                   allow_null=True, allow_blank=True, default='')
    sex = serializers.CharField(label='账号密码', max_length=128, help_text='账号密码', )
    c_time = serializers.DateTimeField(label='创建时间', help_text='创建时间', read_only=True)

这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值