DRF--反序列化输入时数据校验,required,write_only,read_only使用

# 此文件定义子应用projects具备的模型类对应的序列化器
from rest_framework import serializers


class ProjectSerializer(serializers.Serializer):
    """
    1。必须继承Serializer类或其子类
    2。定义的序列化器类中的字段名要与对应模型类中的字段名保持一致
    3。定义序列化器类的字段(类属性)为Field子类
    4。默认定义那些字段,就会返回哪些字段给前端,如果未定义模型类中的某个字段,则该字段既不能输入,也不能输出
    5。定义的序列化器字段中,required默认为True,表示定义的字段必须得输入和输出;
        为False时,则为前端非必传,校验时会忽略该字段
    6。write_only:如果某个字段指定了write_only=True,那么该字段仅仅需要前端输入(反序列化输入,做数据校验),
        即必传参数,但是不会输出
    7。read_only:如果某个字段制定了read_only=True,那么该字段仅仅只输出(序列化输出),可以不用输入
    """
    id = serializers.IntegerField(label='项目id', help_text='项目id', max_value=50, min_value=1,
                                        read_only=True)
    full_name = serializers.CharField(label='项目名称', help_text='项目名称', max_length=20, min_length=4)
    leader = serializers.CharField(label='项目负责人', help_text='项目负责人', max_length=20, min_length=2,
                                   write_only=True)
    is_execute = serializers.BooleanField(label='项目是否执行', help_text='项目是否执行', required=False)
    desc = serializers.CharField(label='项目描述', help_text='项目描述', allow_null=True, allow_blank=True)
    create_time = serializers.DateTimeField(label='项目从创建时间', help_text='项目创建时间', format='%Y-%m-%d %H:%M:%S',
                                            read_only=True)
    update_time = serializers.DateTimeField(label='项目跟新时间', help_text='项目更新时间',
                                            read_only=True)

1.反序列化输入时数据校验

        1.1 序列化器类支持的属性字段类型中的参数

                label:文档信息,在接口文档中显示,类似模型类中的verbose_name

                help_text:文档信息,和模型类中的help_text作用一致

                max_value:反序列化校验允许的最大值,一般在serializers.IntergerField()中使用

                min_value:反序列化校验允许的最小值,一般在serializers.IntergerField()中使用

                write_only:为True时字段校验时为必传参数,只允许反序列化写入做校验,不会输出

                read_only:为True时该字段值前端不能传,只会做序列化输出,定义了

                                        read_only=True,此时前端传入了该字段值,校验器不会做校验,

                                        传入的值也不会入库,而是以空字符串入库,而且会影响后续的数

                                        据入库,报错 "Duplicate entry '' for key 'name'"。

                required:为True时指定该字段为必传字段

                default:指定字段不传值时自动设置默认值入库

                allow_null:是否允许该字段为null,对应models中也要定义null=True才能使用

                allow_blank:是否允许该字段为空字符串,对应models中也要定义null=True才能使用

                format:格式化输出serializers.DateTimeField()字段,

                                如:format='%Y年%m月%d日 %H:%M:%S'

 

2. 序列化器对普通对象的数据校验(非QuerySet/模型对象)

        可以自定义个序列化器,对普通的类属性也可以进行数据校验

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值