• 第四阶段:DRF day79 DRF--DRF中通过ModelSerializer实现单查单增群查群改等操作


    一、昨日内容复习

    """
    1、新建django项目、注册drf、设置国际化、配置数据库(修改数据库操作模块)、自定义Model类(设置文件类型字段和选项字段)、配置media及开放media资源接口
    2、继承Serializer类的基础序列化类,可以将对象序列化成前台所需数据
    3、继承Serializer类的基础反序列化类,可以指定一系列前台提供的数据的校验规则,确保数据安全
    4、重点掌握整合序列化与反序列为一体的继承ModelSerializer类的序列化类
    	设置序列化与反序列化字段,并进行区分
    	提供自定义序列化字段以及自定义反序列化字段
    	设置系统校验规则、局部钩子校验规则与全局钩子校验规则
    """
    

    二、今日内容学习

    """
    1、(重点)二次封装Response:自定义APIResponse继承Response,重写__init__方法
    {'status':0,'msg'ok','results':{}}
    class APIResponse(Response):
    	def __init__(self, status, msg, ..., **kwargs):
    		# status+msg+kwargs => data
    		super().__init__(data, ...)
    
    2、(正常)设置了abstract为True的模型类,称之为基表,这样的模型类是专门作为基类来提供公有属性的
    A(name)、B(title)-Meta-abstract=True、C(B)、D(B)
    
    3、(重点)ORM多表关联操作:
    	外键所放位置
            一对多:外键放在多的一方
    		多对多:外键放在常用的一方
    		一对一:外键放在不常用的一方
    		外键字段为正向查询字段,related_name是反向查询字段
    	外键如何断关联
    		设置外键字段db_constraint=False
    	外键间的级联关系
    		一对一:作者没了,详情也没:on_delete=models.CASCADE
    		一对多:出版社没了,书还是那个出版社出版:on_delete=models.DO_NOTHING
    		一对多:部门没了,员工没有部门(空不能):null=True, on_delete=models.SET_NULL
    		一对多:部门没了,员工进入默认部门(默认值):default=0, on_delete=models.SET_DEFAULT
    		多对多:不能设置on_delete
    4、(重点)连表序列化,在Model类中定义插拔序列化方法属性,完成连表查询
    5、(正常)子序列化可以辅助快速实现自定义外键深度的序列化,但是不能进行反序化
    6、(重点)单查群查接口,序列化类提供序列化对象,many参数控制着操作的数据是一条还是多条
    ModelSerializer(obj) | ModelSerializer(obj, many=True)
    
    7、(正常)单删群删接口,后台操作删除字段即可,前台提供pk就是单删,提供pks就是群删
    pk,pks => pks => filter(pk__in=pks,is_delete=False).update(is_delete=True)
    
    try:
    	# 可能有异常的代码(数据库操作)
    except:
    	raise Exception('某某数据库操作异常了')
    	
    8、(重点)单增群增接口,根据数据判断是单增还是群增,对应序列化类要设置many,而序列化类只需要通过data即可
    ModelSerializer(data=request_data) | ModelSerializer(data=request_data, many=True)
    
    9、(正常)单局部改,序列化类参数instance=修改的对象, data=修改的数据, partial=是否能局部修改,单整体修改就是partial=False(默认就是False)
    ModelSerializer(instance=obj,data=data,partial=True)
    
    10、(了解)群改,前台提供的数据,后台要转化成要修改的对象们和用来更新的数据们,ModelSerializer设置list_serializer_class关联自己的ListSerializer,重写update方法,完成群改
    ModelSerializer(instance=objs,data=datas,many=True,partial=True)
    """
    

    三、今日练习

    练习A

    """
    1、整理今天所学知识点
    
    2、新建员工和部门表,测试验证以下两种连表关系
    	db_constraint=False, null=True, on_delete=models.SET_NULL
    	db_constraint=False, default=0, on_delete=models.SET_DEFAULT
    
    3、自己完成图书管理系统的十大接口
    """
    

    练习B

    """
    1、系统整理以下序列化家族,Serializer、ModelSerializer、ListSerializer,重点总结以下继承ModelSerializer的序列化的使用细节:
    	model、fields、extra_kwargs、局部钩子、全局钩子、list_serializer_class、自定义的序列化字段、自定义的反序列化字段
    """
    
  • 相关阅读:
    MySQL
    Python练习-基于socket的FTPServer
    python练习-Socket实现远程cmd命令
    python概念-Socket到底有多骚
    Python练习-天已经亮了计算器也终于完成了
    python模块-logging的智商上限
    python正则表达式-re模块的爱恨情仇
    Python练习-os模块练习-还算是那么回事儿
    Python练习-time模块
    Python练习-跨目录调用模块
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11913887.html
Copyright © 2020-2023  润新知