Day04-基础视频目录

  1. DRF框架-Django自定义RestAPI接口

    需求:
    	设计一套符合RestAPI风格的接口,提供以下5个接口:
    	1. 获取所有图书数据:GET /books/
    	2. 新增一本图书数据:POST /books/
    	3. 获取指定的图书数据(根据id):GET /books/(?P<pk>\d+)/
    	4. 修改指定的图书数据(根据id):PUT /books/(?P<pk>\d+)/
    	5. 删除指定的图书数据(根据id):DELETE /books/(?P<pk>\d+)/
    
    https://gitee.com/smartliit/sh24_django.git
    
  2. DRF框架-RestAPI接口的核心工作

    序列化:将模型对象转换为字典或json过程,叫做序列化的过程。
    反序列化:将客户端传递数据保存转换到模型对象的过程,叫做反序列化的过程。
    
    核心:
    1. 将数据库数据序列化为前端所需要的格式,并返回;
    2. 将前端发送的数据反序列化为模型类对象,并保存到数据库中。
    
  3. DRF框架-Django Rest FrameWork简介&安装

    作用:提高RestAPI接口开发效率。
    
    关键功能:
    	序列化器(Serializer):序列化和反序列化
    	类视图,Mixin扩展类:简化视图代码的编写
    
    安装:
    	pip install djangorestframework
    
    注册:
    	INSTALLED_APPS = (
    		# ...
    		'rest_framework'
    	)
    
  4. DRF框架-DRF框架功能演示

  5. 序列化器Serializer-功能&知识点说明

    功能:进行数据的序列化和反序列化。
    
    使用:首先定义序列化器类
    
    序列化功能:将对象转换字典。
    	1. 序列化单个对象
    	2. 序列化多个对象
    	3. 关联对象的嵌套序列化
    	
    反序化功能:
    	数据校验:
    		1. 基本验证
    		2. 补充验证
    	数据保存:
    		1. 数据新增create
    		2. 数据更新update
    
  6. 序列化器Serializer-定义&基本使用

    定义模型类:
    	class 模型类(models.Model):
    		模型字段 = models.字段类型(选项参数)
    		
    定义序列化器类:
    	from rest_framework import serializers
    	class 序列化器类(serializers.Serializer):
    		序列化器字段 = serializers.字段类型(选项参数)
    
    
    序列化器类(instance=None, data={}, **kwargs)
    	1. 进行序列化操作,将对象传递给instance
    	2. 进行反序列化操作,将数据传递给data
    
  7. 序列化器Serializer-字段类型&选项参数说明

    	在定义序列化器类的字段时,write_only和read_only默认值都为False,说明这个字段既在序列化时使用,也在反序列化使用。
    
    通用选项参数:
    	write_only:设置为True,该字段只在反序列化时使用,序列化操作时不使用
    	read_only:设置为True,该字段只在序列化时使用,反序列化操作时不使用
    	default:设置序列化和反序列化时所使用的默认值
    	required:默认值是True,指明在进行反序化时此字段是否必须传入
    
  8. 序列化操作-序列化单个对象和多个对象

    序列化单个对象:
    	book = BookInfoSerializer(id=1)
    	serializer = BookInfoSerializer(book)
    	serializer.data
    
    序列化多个对象:
    	books = BookInfo.objects.all() # QuerySet
    	serializer = BookInfoSerializer(books, many=True)
    	serializer.data
    
  9. 序列化操作-关联对象嵌套序列化

    hero = HeroInfo.objects.get(id=1)
    # 获取和英雄关联图书对象
    hero.hbook
    
    # 1. 将关联对象序列化为关联对象主键 PrimaryKeyRelatedField
    {
     "id": 1,
     "hname": "孙悟空",
     "hgender": 0,
     "hcomment": "七十二变",
     "hbook": "<hbook图书主键>"
    }
    
    # 2. 使用指定的序列化器将关联对象进行序列化
    {
     "id": 1,
     "hname": "孙悟空",
     "hgender": 0,
     "hcomment": "七十二变",
     "hbook": {
     	"id": "图书id",
     	"btitle": "图书标题",
     	"bpub_date": "出版日期",
     	"bread": "阅读量",
     	"bcomment": "评论量",
     	"image": "封面图片"
     }
    }
    
    # 3. 将关联对象序列化为关联对象模型类__str__返回值 StringRelatedField
    {
     "id": 1,
     "hname": "孙悟空",
     "hgender": 0,
     "hcomment": "七十二变",
     "hbook": "<图书名称>"
    }
    
    # 注意:如果和对象关联的对象有多个,在定义嵌套序列化的字段时,需要指明many=True
    book = BookInfo.objects.get(id=1)
    # 获取和book对象关联英雄数据
    book.heroinfo_set.all()
    
    {
     	"id": 1,
     	"btitle": "西游记-2",
     	"bpub_date": "1998-10-10",
     	"bread": 10,
     	"bcomment": 0,
     	"image": null,
        "heroinfo_set": [
    		'<英雄id>',
            ...
        ]
    }
    
    {
     	"id": 1,
     	"btitle": "西游记-2",
     	"bpub_date": "1998-10-10",
     	"bread": 10,
     	"bcomment": 0,
     	"image": null,
        "heroinfo_set": [
            {
                'id': '<英雄id>',
                'hname': '<英雄名称>',
                'hgender': '<英雄性别>'
                'hcomment': '<英雄备注>'
            },
            ...
        ]
    }
    
    {
     	"id": 1,
     	"btitle": "西游记-2",
     	"bpub_date": "1998-10-10",
     	"bread": 10,
     	"bcomment": 0,
     	"image": null,
        "heroinfo_set": [
            '<英雄名称>',
            ...
        ]
    }
    
  10. 反序列化操作-数据校验&补充验证

    req_data = {
        'btitle': '测试图书',
        'bpub_date': '2010-1-1'
    }
    
    serializer = BookInfoSerializer(data=req_data)
    # 校验
    res = serializer.is_valid()
    # 获取错误信息
    serializer.errors
    # 获取校验之后的数据
    serializer.validated_data
    
    补充验证3种方法:
    1. 指定特定字段选项参数`validators`来指明补充验证函数
    2. 在序列化器类中定义特定的方法`validate_<fieldname>`来针对特定字段进行补充验证
    3. 定义validate方法进行补充验证:可以结合多个字段内容进行补充验证
    
  11. 反序列化操作-数据保存(新增&更新)

    # 注意:进行数据保存之前必须通过反序化数据验证
    
    # 数据保存
    serializer.save()
    
    调用序列化器save方法时,save方法内部可能会调用序列化器类的create方法和update方法,我们可以在create方法中实现数据新增,在update方法中实现数据更新。
    
    serializer = BookInfoSerializer(data=req_data)
    serializer.is_valid()
    serializer.save() # 调用序列化器类中的create
    
    serializer = BookInfoSerializer(book, data=req_data)
    serializer.is_valid()
    serializer.save() # 调用序列化器类中的update
    
  12. 案例-使用序列化器改写图书管理RestAPI接口

    初级开发工程师(码农)->中高级开发工程师->架构师|项目经理|产品经理->技术总监(CTO)
    	21                24             27                    30
    	
    开饭店|技术合伙人|老师
    
    平安:
    	需求:根据手机壳颜色变化屏幕的颜色。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值