二:Django序列化和反序列化serializers

序列化篇:

                本章讲的是较为常用且方便的ModelSerializer序列化类

                `ModelSerializer`只是一个常规的`Serializer',但是提供了一系列便利

                  1.将自动填充一组默认字段  序列化使用

                  2.自动填充一组默认验证器   反序列化使用

                  3.默认值。

                  4.create()和update()提供了实现

接上文的model篇

# 定义序列化器类规则说明
# 1、必须继承Serializer类或者Serializer子类
# 2、定义的序列化器类中,字段名要与模型类中的字段名保持一致
# 3、定义的序列化器类的字段(类属性)为Field子类
# 4、默认定义哪些字段,那么哪些字段就会返回前端;同时也必须得输入(前端需要传递)
# 5、常用的序列化器字段类型:
# IntegerField-》int
# CharField-》str
# BooleanField-》bool
# DateTimeField-》datetime
# 6、id中的参数:min_value=1,max_value=1000:表示限制id最小值不能小于1,,最 大值id不能大于1000
# 7、可以在序列化器中指定不同的选项
# label和help_text,与模型类中的verbose_name和help_text参数一样
# IntegerField,可以使用max_value指定指定最大值,min_value指定最小值
# CharField,可以使用max_length指定最大长度,min_length指定最小值
# 7、定义的序列化器字段中,required默认为True,说明默认定义的字段得必须输入和输出
# 8、如果在序列化器字段中,设置required=False,那么前端用户可以不传递该字段
# (校验时会忽略该字段)所以不会报错
# 9、如果未定义模型类中的某个字段,那么该字段不会输入也不会输出
# 10、需求:前端必须得输入(反序列化输入)name(必须得校验),但是不会需要输出(序列化输出)
# 如果某个参数指定了write_only=True:那么该字段仅仅只输入(反序列化输入,做数据校验),
# 不会输出(序列化输出),默认为write_only=False
# 11、前端可以不用传递,但是后端需要输出?
# 如果某个参数指定了read_only=True:那么该字段仅仅只输出(序列化输出),
# 不会输入(反序列化输入,做数据校验),默认为read_only=False
# name必传参数不能设置read_only=True
# 12、在序列化器类中定义的字段,默认allow_null=False,该字段不允许传递空值,
# 如果指定allow_null=True,那么该字段允许传递null
# 13、在序列化器类中定义CharField字段,默认allow_blank=False,该字段不允许为空字符串,
# 如果指定allow_blank=True,那么该字段允许传递空字符串
# 14、在序列化器类中定义的字段,可以使用default参数来指定默认值,如果指定了default参数,那么用户可以不用传递,会将default指定的值作为传入参数。
from rest_framework.serializers import ModelSerializer


class BladeNumberTableModelSerializer(ModelSerializer):
    # 必传字段 UniqueValidator校验唯一性
    # model_name = serializers.CharField(
    #     required=False,
    #     validators=[UniqueValidator(
    #         queryset=models.WtgAnalyModel.objects.all())])
    blade_one = serializers.CharField(required=False)
    blade_two = serializers.CharField(required=False)
    blade_three = serializers.CharField(required=False)
    is_delete = serializers.CharField(write_only=True, required=False)

    class Meta:
        model = models.BladeNumberTableModel
        fields = ['id', 'task_id', 'blade_one', 'blade_two', "blade_three", "is_delete"]

猜你喜欢

转载自blog.csdn.net/xiaofeixia666888/article/details/127053919