zoukankan      html  css  js  c++  java
  • 第四阶段:DRF day78 DRF--DRF中Serializer类的序列化和反序列化

    一、昨日内容复习

    """
    1、请求模块:drf的request是对wsgi的request二次封装,且完全兼容,拓展query_params和data两个属性
    2、渲染模块:可以全局和局部配置渲染方式
    3、解析模块:可以全局和局部配置能解析的数据包
    4、异常模块:自定义异常模块,可以自定义异常返回以及提供记录异常的接口(这里接口的意思就是该需求后期可以在这里添加)
    5、响应模块:知道response对象产生可以传那些信息,response对象又是如何访问这些信息的
    """
    

    二、今日学习内容总结

    """
    1、新建django项目、注册drf、设置国际化、配置数据库(修改数据库操作模块)、自定义Model类(设置文件类型字段和选项字段)、配置media及开放media资源接口
    2、继承Serializer类的基础序列化类,可以将对象序列化成前台所需数据
    3、继承Serializer类的基础反序列化类,可以指定一系列前台提供的数据的校验规则,确保数据安全
    	class BookSerializer(serializers.Serializer):
    		name = serializers.CharField(min_length=3, max_length=10)
    		
    		# 自定义序列化字段
    		my_name = serializers.SerializerMethodField()
    		def get_my_name(self, obj):
    			return 'my_name的值,一般与obj有关系'
    			
    		# 自定义反序列化字段
    		re_name = serializers.CharField(min_length=3, max_length=10)
    		
    		# required | write_only | read_only
    		# 局部钩子
    		def validate_name(self, value):
    			if 'g' in name:
    				raise serializers.ValidationError('名字异常')
    			return value
    		# 全局钩子
    		def validate_name(self, attrs):
    			attrs.pop('re_name')
    			# 失败抛异常,成功返回attrs
    		# 需求有增和改还需要重写create和update
    		
    		
    		
    	
    4、重点掌握整合序列化与反序列为一体的继承ModelSerializer类的序列化类
    	设置序列化与反序列化字段,并进行区分
    	提供自定义序列化字段以及自定义反序列化字段
    	设置系统校验规则、局部钩子校验规则与全局钩子校验规则
    	class Book(models.Model):
    		# 自定义序列化字段
    		@property
    		def my_name(self):
    			return 'my_name的值,与Book类对象self有关'
    		
    	class BookModelSerializer(ModelSerializer):
    		# 自定义反序列化字段,系统校验规则必须在声明中属性,在全局钩子移除
    		re_name = serializers.CharField(min_length=3, max_length=10, write_only=True)
    		class Meta:
    			model = Book
    			fields = ('name', 'price', 'my_name', 're_name')
    			extra_kwargs = {
    				# 系统校验
    				'name': {
    					'required': True
    				}
    			}
    		# 局部全局钩子,和Serializer方式一样,且不用重写create和update方法
    """
    

    今日练习

    练习A

    """
    1、整理今天所学知识点
    
    2、新建一个django项目,定义一个Car类,有name字符串属性,color整型选择属性(0:银色,1:黑色,2:红色,3:灰色),price全精度小数类型,image图片文件类型,brand字符串类型
    
    3、基于ModelSerializer类,完成Car资源的单查,群查,单增接口
    	序列化:显示车名,车的颜色,车的价格,车的海报,车的品牌
    	反序列化:必须提供车名,车的价格,车的品牌(车的匹配需要二次确认re_brand),车的颜色默认为银色(可以提供),车的海报不需要提供(默认为空)
    """
    

    练习B

    """
    1、定义Book与Author两个Model类
    	Book:id,name,price
    	Author:id,name,phone
    	Book和Author关系表:id,book_id,author_id
    	
    2、只完成Author表的单查群查接口:查看作者的姓名和电话即可
    
    3、只完成Book表的单查群查接口:查看书名、书的价格、书的作者们(作者包含作者姓名,作者电话)
    核心提示:利用自定义插拔序列化字段完成连表查询
    """
    
  • 相关阅读:
    c# 执行windows模拟登录
    c#文件压缩解压
    c#文件上传下载功能实现
    .NET core3.1 使用Jwt保护api
    我所理解的闭包
    数组遍历for forEach for..in for..of
    变量提升
    微信小程序做radio,可以拖动进度条
    css:flex
    css常用布局
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11907632.html
Copyright © 2011-2022 走看看