django中序列化、反序列化过程(补充)
一、定义序列化器 a、如果需要使用DRF框架来实现序列化、反序列化、数据库操作,在子应用中创建serializers.py文件 b、文件名推荐命名为serializers.py 在serializer.py文件中定义序列化器类 二、定义序列化器类规则说明 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指定的值作为传入参数。 三、引用序列化器 1、可以使用序列化器进行序列化输出操作 a、创建序列化器类对象 b、可以将模型对象或者查询集对象、普通对象、嵌套普通对象的列表,以instance关键字来传递参数 c、如果传递的是查询集对象、嵌套普通对象的列表(多条数据),必须得设置many=True d、如果传递的是模型对象,普通对象,不需要设置many=True e、可以使用序列化器对象的.data属性,获取序列化器之后的数据(字典、嵌套字典的列表)
2、创建数据 3、获取详细数据 4、更新数据 5、删除数据 不涉及序列化输出操作 四、应用反序列化器
1、定义序列化器类,使用data关键字参数传递字典参数 2、可以使用序列化器对象调用.is_valid()方法,才会开始对前端输入的参数进行校验 3、如果校验通过.is_valid()返回True,否则返回False
4、如果调用.is_valid()方法,添加raise_exception=True,校验不通过会抛出异常,否则不会抛出异常 5、只有在调用.id_valid()方法之后,才可以使用序列化器对象调用.errors属性,来获取错误的提示信息(字典类型) 6、只有在调用.is_valid()方法之后,才可以使用序列化器对象调用.validated_data属性,来获取校验通过之后的数据,与json.loads转化之后的数据有区别 1、创建数据 2、更新数据
3、删除一条项目数据 4、获取一条项目数据(获取详情数据) 5、获取所有项目数据(获取列表数据)不涉及反序列化输入操作