Django REST framework

发布时间 2023-08-09 19:02:08作者: 哩子吖

简介

  在 Django 框架基础之上,进行二次开发

  用于构建 Restful API

  简称为 DRF 框架 或 REST framework

 

特性

  提供了强大的 Serialize 序列化器,可以高效进行序列化与反序列化操作

  提供了极为丰富的类视图、Mixin 扩张类、ViewSet 视图集

  提供了直观的 Web API 界面

  多种身份认证喝权限认证

  强大的排序、过滤、分页、搜索、限流等功能

  可扩展性,插件丰富

  

安装与配置

  pip install djangorestframework

  pip install markdown

  在setting.py 配置

  INSTALLED_APPS = [

    ' rest_framework ',

  ]

 

在子应用中创建一个 serialize 序列化器

  1、继承 Serializer 类或者子类

  2、定义的序列化器字段,默认既可以进行序列化输出,也可以进行序列化输入

  3、需要在前端输出哪些数据则在序列化器中定义类属性

  4、若设置 read_only = True ,指定该字段只能进行序列化输出

  5、若设置 write_only = True,则指定该字段只能进行反序列化输入,但不进行序列化输出

  6、在序列化器字段定义时,通过  validators 字段选项添加校验器,校验器可以使用restframework 自带的,或者自定义校验器

    a、字段校验器的校验顺序:字段定义时的限制(包含validator 列表条目从左到右进行校验)--> 单字段的校验(validate_字段名)--> 多字段联合校验(validate)

       b、在序列化器中自定义单字段检验器,命名规则:validate_字段名

    c、在序列化器中自定义多字段检验器,命名规则:validate,参数:attrs

  7、不在视图对数据库进行增删改查操作,在序列化器中操作定义,

    如:在view.py 文件中,如果在创建序列化器对象时,只给data传参,那么调用 serializer.save()实际就是调用序列化对象的 create()

  8、保存或更新数据库模型

    

      校验器的调用

           

      单字端校验器

      

       多字段校验器

        

       在序列化器中进行数据库操作

          

      自定义检验器

          

 

 简化序列化器类的定义,直接继承模型序列器

  功能:

    基于模型类自动生成一系列字段

    基于模型类自动为 Serializer 生成 validators ,比如unique_together

    包含默认的 create() 和update()的实现

  步骤:

    1、在元类中,指定参考哪一个模型类来创建

    2、在元类中,指定为模型类的哪些字段,来生成序列化器,field 字段为指定需要哪些模型字段,exclude 字段为指定模型中的哪些字段不需要

    3、在元类中,read_only_fields 指定某些模型字段为只输出

    4、在元类中,针对某个字段的添加或者修改或包含一些错误信息提示,则需要 extra_kwargs 

    5、若需要指定某个字段需要检验器,则在元类之前定义

         

          extra_kwargs 字段

               

 

 

 在子应用的view 文件中调用序化器

  1、通过模型类对象(或者查询集),传给instance参数即可进行序列化操作

  2、通过传递 序列化器对象的data属性参数,即可以获取转化之后的字典。总结:传参data 是反序列化,instance 是序列化

  

   3、反序列化器中,检验前端输入的数据,调用序列化器对象的 is_valid ()来检验前端参数

    如果检验成功,则返回True,否则校验失败返回False

    设置 is_valid() 参数 raise_exception = True ,那么检验失败之后会抛出异常

    当调用 is_valid () 后,才可以调用 errors 属性,获取检验失败的错误提示

            

     当校验成功之后的数据,可以使用 validated_data 属性来获取

        

    在创建序列化器对象时,同时给 instance 和 data 传参,那么调用save()会自动调用序列化器对象的update()

                           

 

    序列化器的save()调用